Compare commits

...

47 Commits

Author SHA1 Message Date
Marius Bezuidenhout a255c045d2
Merge branch 'arendst:development' into development 2024-04-30 11:39:46 +02:00
s-hadinger fd148a8d12
Berry `math.inf`, `math.isinf()` and fixed json ouput for `inf` and `nan` (#21304) 2024-04-29 22:55:57 +02:00
Christian Baars 5b5fdb0afe
WIP: make I2S bridge compile with Core 3, untested on hardware (#21301)
* make I2S bridge compile with Core 3, untested on hardware

* typo USE_I2S_BRIDGE

* rm Core 2 version
2024-04-28 22:09:09 +02:00
legchenkov ecf7d444c6
Add Support for AHT30 Temperature and Humidity Sensor (#19922)
* Update xsns_63_aht1x.ino

Support for AHT30 added. Fixed command for loading factory calibrated data and reset command, added needed delay after read command and increased measurement period to reduce heating of sensor.

* Update xsns_63_aht1x.ino

* Update xsns_63_aht1x.ino

The reset command is aligned with the AHT10/20/30 datasheet.

* Update ru_RU.h

Translated Dew Point to russian Точка росы for sensors

* Delete tasmota/language/ru_RU.h

Will go to separate PR

* Add files via upload

* Update ru_RU.h

Partial translation update

* Add files via upload
2024-04-28 21:34:36 +02:00
Jason2866 852ce100db
add USE_I2S_ALL (#21298)
Co-authored-by: Staars <baars@klinikum-brandenburg.de>
2024-04-28 18:09:43 +02:00
Jason2866 27d2a0a2d5
add target reset (#21292) 2024-04-27 21:52:39 +02:00
Christian Baars b3c075c666
I2S changes for Core 3 (#21291)
* i2s fixes and refactoring

* DMA setting added, more refactoring
2024-04-27 20:50:03 +02:00
s-hadinger 5cc5e5ef45
HASPmota demo of Renaissance Watch for 480x480 displays (#21290)
* HASPmota demo of Renaissance Watch for 480x480 displays

* Put arrow in front of date
2024-04-27 19:05:24 +02:00
Jason2866 71c8748def
Revert "Platform 2024.04.13 (#21264)" (#21288)
This reverts commit 492c6bbda2.
2024-04-27 18:56:11 +02:00
s-hadinger bf01e5bb70
Fix async HMDI CEC (#21287) 2024-04-27 18:22:50 +02:00
sfromis 311a9f18e6
Wrong feature bit for USE_SPL06_007 (#21286)
Obvious "typo" in setting the feature bit for this recently added sensor. Already mentioned in https://github.com/arendst/Tasmota/pull/21185#issuecomment-2071122611
2024-04-27 16:30:57 +02:00
bovirus 4aa2da3eb2
Update Italian language (#21283) 2024-04-26 16:52:35 +02:00
fb-pilot e2a08d5d01
Add files via upload (#21262)
fix display multiple devices and add more options
2024-04-26 16:52:06 +02:00
Jason2866 41970f7d62
Disable psram check to avoid "blinking" of GPIO 16/17 at startup (#21282)
* add `DISABLE_PSRAMCHECK`

* remove code before IDF 5

* add no psram env
2024-04-25 20:19:20 +02:00
Jason2866 eef4ff389f
Delete IDF 4.4 based i2s code (#21188)
* Delete tasmota/tasmota_xdrv_driver/xdrv_42_2_i2s_mp3stream.ino

* Delete tasmota/tasmota_xdrv_driver/xdrv_42_0_i2s_audio.ino

* Delete tasmota/tasmota_xdrv_driver/xdrv_42_1_i2s_mp3mic.ino
2024-04-25 13:41:47 +02:00
s-hadinger 1e64eaddf3
Berry `webserver.content_close()` (#21276) 2024-04-25 12:50:43 +02:00
s-hadinger 466652549a
Fix faulty printing of IPv4 2024-04-25 11:23:27 +02:00
s-hadinger 2a35f325b8
Put back wifi IPv6 workaround (#21274) 2024-04-25 10:28:42 +02:00
s-hadinger 469492a41a
Berry `web_add_handler` called before `Webserver` is initialized (#21272) 2024-04-25 09:08:24 +02:00
s-hadinger 582ca598f0
HDMI CEC synchronously sends messages (#21270) 2024-04-24 20:06:13 +02:00
s-hadinger 91dd120aa9
TCP Tx En GPIO type (#21269) 2024-04-24 19:53:01 +02:00
Norbert Richter 5a8d713d77
NeoPool prevent possible multiple bus requests (#21267)
* Update NeoPool register desc

* NeoPool prevent possible multiple bus requests
2024-04-24 17:44:26 +02:00
Jason2866 492c6bbda2
Platform 2024.04.13 (#21264) 2024-04-24 13:04:01 +02:00
s-hadinger b9cd7bf04a
Add ESP32S3-4848S040 display.ini (#21259) 2024-04-23 22:12:27 +02:00
s-hadinger 546ed9d409
Add uTouch to WT32_SC01 display.ini (#21258) 2024-04-23 22:05:00 +02:00
s-hadinger 9970b9d947
uDisplay fast drawing on RGB displays (#21257) 2024-04-23 21:17:22 +02:00
s-hadinger 595b7f750d
LVGL fix memory allocation of flush buffers (#21256) 2024-04-23 20:11:01 +02:00
s-hadinger 157e1afb29
LVGL disabled vector graphics (#21242) 2024-04-22 09:18:26 +02:00
Jason2866 805ad32a30
typo 2024-04-21 23:07:51 +02:00
Jason2866 ef99b40578
add S3 env with 120Mhz / 8MB Flash 2024-04-21 23:07:01 +02:00
s-hadinger f6cba1986b
esp32_partition_app3904k_fs3392k partition scheme for 8MB ESP32S3 (#21241) 2024-04-21 22:49:33 +02:00
s-hadinger cb70ff7a77
uDisplay avoid crashing when no valid configuration (#21239) 2024-04-21 15:21:50 +02:00
s-hadinger 5ecd45e2da
Berry avoid crash when Berry is disabled after bootloop (#21235) 2024-04-21 10:03:55 +02:00
s-hadinger c4431eb6fe
Fixed IPv6 support in safeboot (#21233) 2024-04-20 22:15:54 +02:00
s-hadinger bf47a1e51c
LVGL restore `lv_palette` functions (#21232) 2024-04-20 18:57:49 +02:00
s-hadinger fe34b5df3d
HASPmota `align` attribute and expand PNG cache (#21228) 2024-04-20 14:23:31 +02:00
Jason2866 0e273c18f6
add S3 QIO_QSPI 120M board manifest (#21216) 2024-04-18 19:36:55 +02:00
Jason2866 76970ddca9
restore config as it was before switch to core 3.0.0 2024-04-18 16:53:11 +02:00
Theo Arends 0f19dcdff8 Bump version v13.4.1.2
- ESP32-C3 OTA binary name from `tasmota32c3cdc.bin` to `tasmota32c3.bin` with USB HWCDC and fallback to serial (#21212)
- ESP32-C6 OTA binary name from `tasmota32c6cdc.bin` to `tasmota32c6.bin` with USB HWCDC and fallback to serial (#21212)
- ESP32-S3 OTA binary name from `tasmota32s3cdc.bin` to `tasmota32s3.bin` with USB HWCDC and fallback to serial (#21212)
2024-04-18 14:01:27 +02:00
Jason2866 c7ff6342d8
remove extensiom cdc from C3,C6,S3 variants (#21212) 2024-04-18 13:08:31 +02:00
Theo Arends 7e14db4091 Add support for SPL06_007 pressure and temperature sensor (#21185) 2024-04-18 11:47:16 +02:00
Theo Arends 9b5df76860 Add Domoticz safeguards 2024-04-18 11:21:35 +02:00
Rai 13cbf26b87
Adds support for SPL06_007 Temperature & Pressure I2C (+10k2 code) (#21185)
* Adds support for SPL06_007 (+10k2 code)

* removes not so used methods.

Removes -2kb

* change doubles to floats

* fixes a name

* change sns idx to 25
2024-04-18 11:20:02 +02:00
Theo Arends f01e74f605 Update changelogs 2024-04-17 21:53:33 +02:00
s-hadinger 042eecc378
HASPmota `dropdown_list` and fixes (#21208) 2024-04-17 21:43:12 +02:00
Theo Arends e6d9d826ac Clean up code 2024-04-17 21:40:45 +02:00
Theo Arends b6b74ecb96 Fix regression on SendKey() (#21187) 2024-04-17 17:30:25 +02:00
128 changed files with 3648 additions and 3325 deletions

View File

@ -98,13 +98,13 @@ jobs:
- tasmota32solo1-safeboot
- tasmota32c2-safeboot
- tasmota32c3-safeboot
- tasmota32c3cdc-safeboot
- tasmota32c3ser-safeboot
- tasmota32s2-safeboot
- tasmota32s2cdc-safeboot
- tasmota32s3-safeboot
- tasmota32s3cdc-safeboot
- tasmota32s3ser-safeboot
- tasmota32c6-safeboot
- tasmota32c6cdc-safeboot
- tasmota32c6ser-safeboot
steps:
- uses: actions/checkout@v4
with:
@ -194,11 +194,11 @@ jobs:
- tasmota32-ir
- tasmota32-lvgl
- tasmota32c2
- tasmota32c3cdc
- tasmota32c6cdc
- tasmota32c3
- tasmota32c6
- tasmota32s2
- tasmota32s2cdc
- tasmota32s3cdc
- tasmota32s3
- tasmota32solo1
steps:
- uses: actions/checkout@v4

View File

@ -21,17 +21,17 @@ jobs:
strategy:
matrix:
variant:
- tasmota32solo1-safeboot
- tasmota32-safeboot
- tasmota32solo1-safeboot
- tasmota32c2-safeboot
- tasmota32c3-safeboot
- tasmota32c3cdc-safeboot
- tasmota32c3ser-safeboot
- tasmota32s2-safeboot
- tasmota32s2cdc-safeboot
- tasmota32s3-safeboot
- tasmota32s3cdc-safeboot
- tasmota32s3ser-safeboot
- tasmota32c6-safeboot
- tasmota32c6cdc-safeboot
- tasmota32c6ser-safeboot
steps:
- uses: actions/checkout@v4
with:
@ -114,11 +114,11 @@ jobs:
- tasmota32-ir
- tasmota32-lvgl
- tasmota32c2
- tasmota32c3cdc
- tasmota32c6cdc
- tasmota32c3
- tasmota32c6
- tasmota32s2
- tasmota32s2cdc
- tasmota32s3cdc
- tasmota32s3
- tasmota32solo1
steps:
- uses: actions/checkout@v4

View File

@ -91,8 +91,13 @@ jobs:
- tasmota-sensors
- tasmota-zbbridge
- tasmota32
- tasmota32solo1
- tasmota32c2
- tasmota32c3
- tasmota32c6
- tasmota32s2
- tasmota32s2cdc
- tasmota32s3
- tasmota32-zbbrdgpro
- tasmota-zigbee
- tasmota32-bluetooth
@ -100,19 +105,13 @@ jobs:
- tasmota32-display
- tasmota32-ir
- tasmota32-lvgl
- tasmota32c3cdc
- tasmota32c6cdc
- tasmota32s2cdc
- tasmota32s3cdc
- tasmota32solo1
- tasmota32-safeboot
- tasmota32s2-safeboot
- tasmota32s2cdc-safeboot
- tasmota32s3-safeboot
- tasmota32c2-safeboot
- tasmota32s3cdc-safeboot
- tasmota32c3cdc-safeboot
- tasmota32c6cdc-safeboot
- tasmota32c3-safeboot
- tasmota32c6-safeboot
steps:
- uses: actions/checkout@v4
- name: Set up Python

View File

@ -3,18 +3,49 @@ All notable changes to this project will be documented in this file.
## [Unreleased] - Development
## [13.4.1.1]
## [13.4.1.2]
### Added
- esp32_partition_app3904k_fs3392k partition scheme for 8MB ESP32S3
- TCP Tx En GPIO type
- Berry `webserver.content_close()`
- HASPmota demo of Renaissance Watch for 480x480 displays
### Breaking Changed
- ESP32-C3 OTA binary name from `tasmota32c3cdc.bin` to `tasmota32c3.bin` with USB HWCDC and fallback to serial (#21212)
- ESP32-C6 OTA binary name from `tasmota32c6cdc.bin` to `tasmota32c6.bin` with USB HWCDC and fallback to serial (#21212)
- ESP32-S3 OTA binary name from `tasmota32s3cdc.bin` to `tasmota32s3.bin` with USB HWCDC and fallback to serial (#21212)
### Changed
- uDisplay fast drawing on RGB displays
- HDMI CEC synchronously sends messages
### Fixed
- HASPmota `align` attribute and expand PNG cache
- LVGL restore `lv_palette` functions
- IPv6 support in safeboot
- LVGL fix memory allocation of flush buffers
- Berry `web_add_handler` called before `Webserver` is initialized
- Put back wifi IPv6 workaround
- Berry `math.inf`, `math.isinf()` and fixed json ouput for `inf` and `nan`
### Removed
- LVGL disabled vector graphics
## [13.4.1.1] 20240418
### Added
- HASPmota `dropdown_list` and fixes (#21208)
- Support for SPL06_007 pressure and temperature sensor (#21185)
### Breaking Changed
- ESP32 Ethernet Phy Type number for DM9051 from 4 to 10 (#21204)
### Changed
- ESP32 Framework (Arduino Core) from v2.0.15 to v3.0.0 (#21180)
- ESP32 Core3 platform update from 2024.04.11 to 2024.04.12 (#21199)
- ESP32 Ethernet Phy Type number for DM9051 from 4 to 10 (#21204)
### Fixed
- HASPmota dropdown class "options" attribute (#21203)
- ESP8266 physical button/switch control when no rules activated (#21187)
### Removed
- Support for ESP32 Arduino Core 2 (#21180)

View File

@ -136,7 +136,7 @@ In addition to @arendst the following code is mainly owned by:
| xsns_22_sr04 | Nuno Ferreira, @arendst
| xsns_23_me007 | Mathias Buder
| xsns_24_si1145 |
| xsns_25 |
| xsns_25_spl06-007_sensor | @rai68
| xsns_26_lm75ad | Andre Thomas
| xsns_27_apds9960 | Shawn Hymel
| xsns_28 |

View File

@ -125,5 +125,5 @@ Index | Define | Driver | Device | Address(es) | Bus2 | Descrip
85 | USE_ENS210 | xsns_112 | ENS210 | 0x43 - 0x44 | | Temperature and humidity sensor
86 | USE_AMSX915 | xsns_114 | AMS5915 | 0x28 | | Pressure (absolute/differential) and temperature sensor
86 | USE_AMSX915 | xsns_114 | AMS6915 | 0x28 | | Pressure (absolute/differential) and temperature sensor
87 | USE_SPL06_007 | xsns_25 | SPL06-007 | 0x76 | | Pressure and temperature sensor
NOTE: Bus2 supported on ESP32 only.

View File

@ -83,9 +83,13 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
The following binary downloads have been compiled with ESP32/Arduino library core version **3.0.0**.
- **tasmota32.bin** = The Tasmota version with most drivers including additional sensors and KNX for 4M+ flash. **RECOMMENDED RELEASE BINARY**
- **tasmota32xy.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C2/C3/C6/S2/S3 and 4M+ flash.
- **tasmota32xycdc.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C2/C3/C6/S2/S3 with serial over embedded USB CDC only and 4M+ flash.
- **tasmota32solo1.bin** = The Tasmota version with most drivers including additional sensors and KNX for single core ESP32 and 4M+ flash.
- **tasmota32s2.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-S2 with serial and 4M+ flash.
- **tasmota32s2cdc.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-S2 with serial over embedded USB CDC only and 4M+ flash.
- **tasmota32s3.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-S3 with USB HWCDC and fallback to serial and 4M+ flash.
- **tasmota32c2.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C2 with serial and 4M+ flash.
- **tasmota32c3.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C2 with USB HWCDC and fallback to serial and 4M+ flash.
- **tasmota32c6.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C6 with USB HWCDC and fallback to serial and 4M+ flash.
- **tasmota32-AD.bin** to **tasmota32-VN.bin** = The Tasmota version in different languages for 4M+ flash.
- **tasmota32-bluetooth.bin** = The Bluetooth version adds BLE support for 4M+ flash.
- **tasmota32-display.bin** = The Display version without Energy Monitoring but adds display support for 4M+ flash.
@ -110,7 +114,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
[Complete list](BUILDS.md) of available feature and sensors.
## Changelog v13.4.1.1
## Changelog v13.4.1.2
### Added
- Command ``Wifi 6`` to enable 11ax on ESP32
- Command ``PowerLock`` to disable power control of selected outputs [#21081](https://github.com/arendst/Tasmota/issues/21081)
@ -124,6 +128,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Support Azure iothub direct method [#21013](https://github.com/arendst/Tasmota/issues/21013)
- Support for Domoticz non-persistent ``DzIdx5`` to ``DzIdx32`` and disabling DOMOTICZ_OUT_TOPIC subscribe using command ``DzIdx0 0`` [#21019](https://github.com/arendst/Tasmota/issues/21019)
- Support SPI GPIO configuration for Universal Touch Screen [#21025](https://github.com/arendst/Tasmota/issues/21025)
- Support for SPL06_007 pressure and temperature sensor [#21185](https://github.com/arendst/Tasmota/issues/21185)
- Zigbee support for attributes of type `uint48` used by energy monitoring [#20992](https://github.com/arendst/Tasmota/issues/20992)
- QMC5883l check for overflow and scale reading [#20643](https://github.com/arendst/Tasmota/issues/20643)
- Berry explicit error log when memory allocation fails [#20807](https://github.com/arendst/Tasmota/issues/20807)
@ -136,10 +141,15 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- HASPmota `p<x>b<y>.delete` to delete an object [#20735](https://github.com/arendst/Tasmota/issues/20735)
- HASPmota improve arc and img [#20894](https://github.com/arendst/Tasmota/issues/20894)
- HASPmota support for scale, percentages [#20974](https://github.com/arendst/Tasmota/issues/20974)
- HASPmota `dropdown_list` and fixes [#21208](https://github.com/arendst/Tasmota/issues/21208)
### Breaking Changed
- Drop support for old (insecure) fingerprint format [#20842](https://github.com/arendst/Tasmota/issues/20842)
- Removed dedicated touch drivers in favour of Universal Touch driver [#21146](https://github.com/arendst/Tasmota/issues/21146)
- ESP32 Ethernet Phy Type number for DM9051 from 4 to 10 (#21204)[#21204](https://github.com/arendst/Tasmota/issues/21204)
- ESP32-C3 OTA binary name from `tasmota32c3cdc.bin` to `tasmota32c3.bin` with USB HWCDC and fallback to serial [#21212](https://github.com/arendst/Tasmota/issues/21212)
- ESP32-C6 OTA binary name from `tasmota32c6cdc.bin` to `tasmota32c6.bin` with USB HWCDC and fallback to serial [#21212](https://github.com/arendst/Tasmota/issues/21212)
- ESP32-S3 OTA binary name from `tasmota32s3cdc.bin` to `tasmota32s3.bin` with USB HWCDC and fallback to serial [#21212](https://github.com/arendst/Tasmota/issues/21212)
- Berry loading .be file does not generated .bec anymore [#21075](https://github.com/arendst/Tasmota/issues/21075)
- LVGL remove embedded typicons font [#20872](https://github.com/arendst/Tasmota/issues/20872)
- LVGL remove `textarea` and `spinbox` from binaries [#20916](https://github.com/arendst/Tasmota/issues/20916)
@ -156,7 +166,6 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- KNX format of energy to match specifications [#21074](https://github.com/arendst/Tasmota/issues/21074)
- ESP32 refactored Wifi for ESP32 Core3 release [#21106](https://github.com/arendst/Tasmota/issues/21106)
- ESP32 WiFi phy modes 11n and 11ax represented as HT20, HT40 and HE20 [#19350](https://github.com/arendst/Tasmota/issues/19350)
- ESP32 Ethernet Phy Type number for DM9051 from 4 to 10 (#21204)[#21204](https://github.com/arendst/Tasmota/issues/21204)
- berry.exe (pre-compiled for Windows) updated to latest Berry patches [#21024](https://github.com/arendst/Tasmota/issues/21024)
- Berry class `int64` made immutable [#20727](https://github.com/arendst/Tasmota/issues/20727)
- Matter reduce memory usage when reading with wildcards [#20809](https://github.com/arendst/Tasmota/issues/20809)
@ -179,6 +188,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Too restrictive checksum checks in Lib_teleinfo [#21033](https://github.com/arendst/Tasmota/issues/21033)
- Color swap option for rgb displaytext [#21049](https://github.com/arendst/Tasmota/issues/21049)
- NeoPool hydrolysis unit for Hidrolife, Bionet and Generic device [#21098](https://github.com/arendst/Tasmota/issues/21098)
- ESP8266 physical button/switch control when no rules activated [#21187](https://github.com/arendst/Tasmota/issues/21187)
- ESP32 PWM activity on unconfigured PWM GPIOs [#20732](https://github.com/arendst/Tasmota/issues/20732)
- BTHome, prep BLE5 [#20989](https://github.com/arendst/Tasmota/issues/20989)
- Berry Memory leak in `import re` [#20823](https://github.com/arendst/Tasmota/issues/20823)

View File

@ -1,7 +1,7 @@
{
"build": {
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DESP32_4M -DESP32C3",
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C3 -DUSE_USB_CDC_CONSOLE",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
@ -14,6 +14,10 @@
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32c3.cfg"
},
"frameworks": [
@ -33,10 +37,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html",
"vendor": "Espressif"

View File

@ -1,7 +1,7 @@
{
"build": {
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C3 -DUSE_USB_CDC_CONSOLE",
"extra_flags": "-DARDUINO_TASMOTA -DESP32_4M -DESP32C3",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
@ -14,10 +14,6 @@
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32c3.cfg"
},
"frameworks": [
@ -29,7 +25,7 @@
"flash_extra_images": [
[
"0x10000",
"tasmota32c3cdc-safeboot.bin"
"tasmota32c3ser-safeboot.bin"
]
]
},
@ -37,10 +33,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 2000000
"speed": 460800
},
"download": {
"speed": 2000000
"speed": 230400
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html",
"vendor": "Espressif"

View File

@ -1,7 +1,7 @@
{
"build": {
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DESP32_4M -DESP32C6",
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C6 -DUSE_USB_CDC_CONSOLE",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
@ -14,6 +14,10 @@
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32c6.cfg"
},
"frameworks": [
@ -33,10 +37,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html",
"vendor": "Espressif"

View File

@ -1,7 +1,7 @@
{
"build": {
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C6 -DUSE_USB_CDC_CONSOLE",
"extra_flags": "-DARDUINO_TASMOTA -DESP32_4M -DESP32C6",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
@ -14,10 +14,6 @@
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32c6.cfg"
},
"frameworks": [
@ -29,7 +25,7 @@
"flash_extra_images": [
[
"0x10000",
"tasmota32c6cdc-safeboot.bin"
"tasmota32c6ser-safeboot.bin"
]
]
},
@ -37,10 +33,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 2000000
"speed": 460800
},
"download": {
"speed": 2000000
"speed": 230400
},
"url": "https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html",
"vendor": "Espressif"

View File

@ -4,10 +4,16 @@
"memory_type": "opi_opi"
},
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -18,6 +24,10 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -37,10 +47,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -11,7 +11,7 @@
"flash_mode": "dout",
"mcu": "esp32s3",
"variant": "esp32s3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
},
"connectivity": [
@ -20,6 +20,10 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -39,10 +43,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -4,10 +4,16 @@
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -18,6 +24,10 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -37,10 +47,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -11,7 +11,7 @@
"flash_mode": "qio",
"mcu": "esp32s3",
"variant": "esp32s3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
},
"connectivity": [
@ -20,6 +20,10 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -39,10 +43,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -4,10 +4,16 @@
"memory_type": "qio_qspi"
},
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -18,6 +24,10 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -37,10 +47,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
"speed": 2000000
},
"download": {
"speed": 230400
"speed": 2000000
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -1,7 +1,7 @@
{
"build": {
"arduino":{
"memory_type": "qio_opi"
"memory_type": "qio_qspi"
},
"core": "esp32",
"f_cpu": "240000000L",
@ -29,13 +29,13 @@
"frameworks": [
"arduino"
],
"name": "Espressif Generic ESP32-S3 >= 4M QIO Flash + OPI PSRAM, Tasmota 2880k Code/OTA, 320k FS",
"name": "Espressif Generic ESP32-S3 >= 4M QIO Flash + QSPI PSRAM, Tasmota 2880k Code/OTA, 320k FS",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"tasmota32s3cdc-safeboot.bin"
"tasmota32s3-safeboot.bin"
]
]
},

View File

@ -4,16 +4,10 @@
"memory_type": "opi_opi"
},
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -24,10 +18,6 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -39,7 +29,7 @@
"flash_extra_images": [
[
"0x10000",
"tasmota32s3cdc-safeboot.bin"
"tasmota32s3ser-safeboot.bin"
]
]
},
@ -47,10 +37,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 2000000
"speed": 460800
},
"download": {
"speed": 2000000
"speed": 230400
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -11,7 +11,7 @@
"flash_mode": "dout",
"mcu": "esp32s3",
"variant": "esp32s3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
},
"connectivity": [
@ -20,10 +20,6 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -35,7 +31,7 @@
"flash_extra_images": [
[
"0x10000",
"tasmota32s3cdc-safeboot.bin"
"tasmota32s3ser-safeboot.bin"
]
]
},
@ -43,10 +39,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 2000000
"speed": 460800
},
"download": {
"speed": 2000000
"speed": 230400
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -4,16 +4,10 @@
"memory_type": "qio_opi"
},
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -24,10 +18,6 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -39,7 +29,7 @@
"flash_extra_images": [
[
"0x10000",
"tasmota32s3cdc-safeboot.bin"
"tasmota32s3ser-safeboot.bin"
]
]
},
@ -47,10 +37,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 2000000
"speed": 460800
},
"download": {
"speed": 2000000
"speed": 230400
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -0,0 +1,49 @@
{
"build": {
"arduino":{
"memory_type": "qio_opi"
},
"core": "esp32",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"f_boot": "120000000L",
"boot": "qio",
"flash_mode": "qio",
"mcu": "esp32s3",
"variant": "esp32s3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet"
],
"debug": {
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"arduino"
],
"name": "Espressif Generic ESP32-S3 >= 4M QIO Flash + OPI PSRAM, Tasmota 2880k Code/OTA, 320k FS",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"tasmota32s3ser-safeboot.bin"
]
]
},
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
"download": {
"speed": 230400
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"
}

View File

@ -4,16 +4,10 @@
"memory_type": "qio_qspi"
},
"core": "esp32",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -24,10 +18,6 @@
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
@ -39,7 +29,7 @@
"flash_extra_images": [
[
"0x10000",
"tasmota32s3cdc-safeboot.bin"
"tasmota32s3ser-safeboot.bin"
]
]
},
@ -47,10 +37,10 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 2000000
"speed": 460800
},
"download": {
"speed": 2000000
"speed": 230400
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"

View File

@ -40,6 +40,7 @@ class TasmotaSerial : public Stream {
TasmotaSerial(int receive_pin, int transmit_pin, int hardware_fallback = 0, int nwmode = 0, int buffer_size = TM_SERIAL_BUFFER_SIZE, bool invert = false);
virtual ~TasmotaSerial();
void setTransmitEnablePin(int tx_enable_pin);
void clearTransmitEnablePin(void) { m_tx_enable_pin = -1; }
size_t setRxBufferSize(size_t size);
size_t getRxBufferSize() { return serial_buffer_size; }

View File

@ -28,7 +28,7 @@
// b. textcolor,textbgcolor => public;
typedef struct LVGL_PARAMS {
uint16_t fluslines;
uint16_t flushlines;
union {
uint8_t data;
struct {

View File

@ -24,6 +24,10 @@
#include "esp8266toEsp32.h"
#endif
#ifdef USE_ESP32_S3
#include "esp_cache.h"
#endif // USE_ESP32_S3
#include "tasmota_options.h"
extern int Cache_WriteBack_Addr(uint32_t addr, uint32_t size);
@ -142,13 +146,14 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) {
epc_full_cnt = 0;
lut_num = 0;
lvgl_param.data = 0;
lvgl_param.fluslines = 40;
lvgl_param.flushlines = 40;
rot_t[0] = 0;
rot_t[1] = 1;
rot_t[2] = 2;
rot_t[3] = 3;
epcoffs_full = 0;
epcoffs_part = 0;
interface = 0;
for (uint32_t cnt = 0; cnt < MAX_LUTS; cnt++) {
lut_cnt[cnt] = 0;
@ -589,7 +594,7 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) {
lut3time = next_val(&lp1);
break;
case 'B':
lvgl_param.fluslines = next_val(&lp1);
lvgl_param.flushlines = next_val(&lp1);
lvgl_param.data = next_val(&lp1);
break;
case 'M':
@ -1027,6 +1032,13 @@ exit:
Renderer *uDisplay::Init(void) {
extern bool UsePSRAM(void);
if (!interface) { // no valid configuration, abort
#ifdef UDSP_DEBUG
Serial.printf("Dsp Init no valid configuration\n");
#endif
return NULL;
}
#ifdef UDSP_DEBUG
Serial.printf("Dsp Init 1 start \n");
#endif
@ -1154,6 +1166,12 @@ Renderer *uDisplay::Init(void) {
if (interface == _UDSP_RGB) {
#ifdef USE_ESP32_S3
if (!UsePSRAM()) { // RGB is not supported on S3 without PSRAM
#ifdef UDSP_DEBUG
Serial.printf("Dsp RGB requires PSRAM, abort\n");
#endif
return NULL;
}
if (bpanel >= 0) {
analogWrite(bpanel, 32);
@ -2183,42 +2201,67 @@ void uDisplay::pushColors(uint16_t *data, uint16_t len, boolean not_swapped) {
}
//Serial.printf("push %x - %d - %d - %d\n", (uint32_t)data, len, not_swapped, lvgl_param.data);
if (not_swapped == false) {
// called from LVGL bytes are swapped
if (interface == _UDSP_RGB) {
// Isolating _UDPS_RGB to increase code sharing
//
// LVGL documentation suggest to call the following:
// lv_draw_sw_rgb565_swap() to invert bytes
// esp_lcd_panel_draw_bitmap() to paste bytes
// but it appears to be faster to include the color swap in the copy loop
// because the CPU is much faster than PSRAM (SPI bus), therefore
// swapping bytes on the fly costs zero performance
//
// not_swapped == false : called from LVGL bytes are swapped
// not_swapped == true : called from displaytext, no byte swap, currently no dma here
if (interface == _UDSP_RGB) {
#ifdef USE_ESP32_S3
if (cur_rot > 0) {
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
seta_yp1++;
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
uint16_t color = *data++;
color = color << 8 | color >> 8;
drawPixel_RGB(x, y, color);
len--;
if (!len) return; // failsafe - exist if len (pixel number) is exhausted
}
}
} else {
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
seta_yp1++;
uint16_t *fb = rgb_fb;
fb += (int32_t)y * _width;
fb += seta_xp1;
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
uint16_t color = *data++;
color = color << 8 | color >> 8;
*fb = color;
Cache_WriteBack_Addr((uint32_t)fb, 2);
fb++;
len--;
if (!len) return; // failsafe - exist if len (pixel number) is exhausted
}
// check that bytes count matches the size of area, and remove from inner loop
if ((seta_yp2 - seta_yp1) * (seta_xp2 - seta_xp2) > len) { return; }
if (cur_rot > 0) {
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
seta_yp1++;
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
uint16_t color = *data++;
if (!not_swapped) { color = color << 8 | color >> 8; }
drawPixel_RGB(x, y, color);
len--;
if (!len) return; // failsafe - exist if len (pixel number) is exhausted
}
}
#endif
return;
} else {
uint16_t *fb_y = rgb_fb + (int32_t)seta_yp1 * _width;
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
uint16_t * fb_xy = fb_y + seta_xp1;
// we get the 'not_swapped' test outside of the inner loop
if (not_swapped) {
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
uint16_t color = *data++;
*fb_xy = color;
fb_xy++;
}
} else {
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
uint16_t color = *data++;
color = color << 8 | color >> 8;
*fb_xy = color;
fb_xy++;
}
}
fb_y += _width;
}
// using esp_cache_msync() to flush the PSRAM cache and ensure that all data is actually written to PSRAM
// from https://github.com/espressif/esp-idf/blob/636ff35b52f10e1a804a3760a5bd94e68f4b1b71/components/esp_lcd/rgb/esp_lcd_panel_rgb.c#L159
uint16_t * flush_ptr = rgb_fb + (int32_t)seta_yp1 * _width;
esp_cache_msync(flush_ptr, (seta_yp2 - seta_yp1) * _width * 2, 0);
}
#endif
return;
}
if (not_swapped == false) {
// called from LVGL bytes are swapped
if (bpp != 16) {
// lvgl_color_swap(data, len); -- no need to swap anymore, we have inverted the mask
pushColorsMono(data, len, true);
@ -2292,35 +2335,6 @@ void uDisplay::pushColors(uint16_t *data, uint16_t len, boolean not_swapped) {
}
} else {
// called from displaytext, no byte swap, currently no dma here
if (interface == _UDSP_RGB) {
#ifdef USE_ESP32_S3
if (cur_rot > 0) {
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
seta_yp1++;
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
drawPixel_RGB(x, y, *data++);
len--;
if (!len) return; // failsafe - exist if len (pixel number) is exhausted
}
}
} else {
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
seta_yp1++;
uint16_t *fb = rgb_fb;
fb += (int32_t)y * _width;
fb += seta_xp1;
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
*fb = *data++;
Cache_WriteBack_Addr((uint32_t)fb, 2);
fb++;
len--;
if (!len) return; // failsafe - exist if len (pixel number) is exhausted
}
}
}
#endif
return;
}
if (bpp != 16) {
pushColorsMono(data, len);

View File

@ -493,7 +493,7 @@ void RA8876::DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font) {
bool RA8876::initDisplay() {
lvgl_param.fluslines = 10;
lvgl_param.flushlines = 10;
SPI.beginTransaction(m_spiSettings);

View File

@ -0,0 +1,7 @@
# SPL06-007
Ardino SPL06-007 Library
This is a work in progress to create a working Arduino library for the SPL06-007 pressure sensor. I am able to get the coefficents, pressure, and temperature readings from the sensor. Need to convert to a standard Arduino library format. Code was developed and tested on an ESP32 microcontroller.
Link to datasheet
https://datasheet.lcsc.com/szlcsc/1912111437_Goertek-SPL06-007_C233787.pdf

View File

@ -0,0 +1,119 @@
#include <SPL06-007.h>
#include <Wire.h>
//#define Serial SerialUSB
void setup() {
Wire.begin(); // begin Wire(I2C)
Serial.begin(115200); // begin Serial
Serial.println("\nGoertek-SPL06-007 Demo\n");
SPL_init(); // Setup initial SPL chip registers - default i2c address 0x76
// SPL_init(0x77); // Uncomment for alternate I2C address 0x77
}
void loop() {
// ---- Register Values ----------------
Serial.print("ID: ");
Serial.println(get_spl_id());
Serial.print("PRS_CFG: ");
Serial.println(get_spl_prs_cfg(),BIN);
Serial.print("TMP_CFG: ");
Serial.println(get_spl_tmp_cfg(),BIN);
Serial.print("MEAS_CFG: ");
Serial.println(get_spl_meas_cfg(),BIN);
Serial.print("CFG_REG: ");
Serial.println(get_spl_cfg_reg(),BIN);
Serial.print("INT_STS: ");
Serial.println(get_spl_int_sts(),BIN);
Serial.print("FIFO_STS: ");
Serial.println(get_spl_fifo_sts(),BIN);
// ---- Coefficients ----------------
Serial.print("c0: ");
Serial.println(get_c0());
Serial.print("c1: ");
Serial.println(get_c1());
Serial.print("c00: ");
Serial.println(get_c00());
Serial.print("c10: ");
Serial.println(get_c10());
Serial.print("c01: ");
Serial.println(get_c01());
Serial.print("c11: ");
Serial.println(get_c11());
Serial.print("c20: ");
Serial.println(get_c20());
Serial.print("c21: ");
Serial.println(get_c21());
Serial.print("c30: ");
Serial.println(get_c30());
// ---- Temperature Values ----------------
Serial.print("traw: ");
Serial.println(get_traw());
Serial.print("traw_sc: ");
Serial.println(get_traw_sc(),3);
Serial.print("Temperature: ");
Serial.print(get_temp_c());
Serial.println(" C");
Serial.print("Temperature: ");
Serial.print(get_temp_f());
Serial.println(" F");
// ---- Pressure Values ----------------
Serial.print("praw: ");
Serial.println(get_praw());
Serial.print("praw_sc: ");
Serial.println(get_praw_sc(),3);
Serial.print("pcomp: ");
Serial.println(get_pcomp(),2);
Serial.print("Measured Air Pressure: ");
Serial.print(get_pressure(),2);
Serial.println(" mb");
// ---- Altitude Values ----------------
double local_pressure = 1011.3; // Look up local sea level pressure on google // Local pressure from airport website 8/22
Serial.print("Local Airport Sea Level Pressure: ");
Serial.print(local_pressure,2);
Serial.println(" mb");
Serial.print("altitude: ");
Serial.print(get_altitude(get_pressure(),local_pressure),1);
Serial.println(" m");
Serial.print("altitude: ");
Serial.print(get_altitude_f(get_pressure(),local_pressure),1); // convert from meters to feet
Serial.println(" ft");
Serial.println("\n");
delay(2000);
}

View File

@ -0,0 +1,57 @@
#######################################
# Syntax Coloring Map For SHT21
#######################################
#######################################
# Datatypes (KEYWORD1)
#######################################
SPL06-007 KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
SPL_init KEYWORD2
get_spl_id KEYWORD2
get_spl_prs_cfg KEYWORD2
get_spl_tmp_cfg KEYWORD2
get_spl_meas_cfg KEYWORD2
get_spl_cfg_reg KEYWORD2
get_spl_int_sts KEYWORD2
get_spl_fifo_sts KEYWORD2
get_traw KEYWORD2
get_traw_sc KEYWORD2
get_temp_c KEYWORD2
get_temperature_scale_factor KEYWORD2
get_pressure_scale_factor KEYWORD2
get_pcomp KEYWORD2
get_praw_sc KEYWORD2
get_praw KEYWORD2
get_pressure KEYWORD2
get_c0 KEYWORD2
get_c1 KEYWORD2
get_c00 KEYWORD2
get_c10 KEYWORD2
get_c01 KEYWORD2
get_c11 KEYWORD2
get_c20 KEYWORD2
get_c21 KEYWORD2
get_c30 KEYWORD2
i2c_eeprom_write_uint8_t KEYWORD2
i2c_eeprom_read_uint8_t KEYWORD2
#######################################
# Instances (KEYWORD2)
#######################################
#######################################
# Constants (LITERAL1)
#######################################

View File

@ -0,0 +1,11 @@
name=SPL06-007
version=0.1.0
author=rv701
maintainer=rv701
sentence=SPL06-007 library for Arduino processors
paragraph=Supports SPL06-007 I2C pressure sensor.
category=Sensors
url=https://github.com/rv701/SPL06-007
architectures=*
includes=SPL06-007.h

View File

@ -0,0 +1,371 @@
#include "SPL06-007.h"
#include "Wire.h"
uint8_t SPL_CHIP_ADDRESS = 0x76;
void SPL_init(uint8_t spl_address)
{
if(spl_address == 0x77)
SPL_CHIP_ADDRESS = 0x77;
// ---- Oversampling of >8x for temperature or pressuse requires FIFO operational mode which is not implemented ---
// ---- Use rates of 8x or less until feature is implemented ---
i2c_eeprom_write_uint8_t(SPL_CHIP_ADDRESS, 0X06, 0x03); // Pressure 8x oversampling
i2c_eeprom_write_uint8_t(SPL_CHIP_ADDRESS, 0X07, 0X83); // Temperature 8x oversampling
i2c_eeprom_write_uint8_t(SPL_CHIP_ADDRESS, 0X08, 0B0111); // continuous temp and pressure measurement
i2c_eeprom_write_uint8_t(SPL_CHIP_ADDRESS, 0X09, 0X00); // FIFO Pressure measurement
}
uint8_t get_spl_id()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x0D);
}
uint8_t get_spl_prs_cfg()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x06);
}
uint8_t get_spl_tmp_cfg()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x07);
}
uint8_t get_spl_meas_cfg()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x08);
}
uint8_t get_spl_cfg_reg()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x09);
}
uint8_t get_spl_int_sts()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x0A);
}
uint8_t get_spl_fifo_sts()
{
return i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0x0B);
}
float get_traw_sc() {
int32_t traw = get_traw();
return (float(traw)/get_temperature_scale_factor());
}
float get_temp_c() {
int16_t c0,c1;
c0 = get_c0();
c1 = get_c1();
float traw_sc = get_traw_sc();
return (float(c0) * 0.5f) + (float(c1) * traw_sc);
}
float get_temperature_scale_factor()
{
float k;
uint8_t tmp_Byte;
tmp_Byte = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X07); // MSB
//tmp_Byte = tmp_Byte >> 4; //Focus on bits 6-4
tmp_Byte = tmp_Byte & 0B00000111;
switch (tmp_Byte)
{
case 0B000:
k = 524288.0f;
break;
case 0B001:
k = 1572864.0f;
break;
case 0B010:
k = 3670016.0f;
break;
case 0B011:
k = 7864320.0f;
break;
case 0B100:
k = 253952.0f;
break;
case 0B101:
k = 516096.0f;
break;
case 0B110:
k = 1040384.0f;
break;
case 0B111:
k = 2088960.0f;
break;
}
return k;
}
int32_t get_traw()
{
int32_t tmp;
uint8_t tmp_MSB,tmp_LSB,tmp_XLSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X03); // MSB
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X04); // LSB
tmp_XLSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X05); // XLSB
tmp = (tmp_MSB << 8) | tmp_LSB;
tmp = (tmp << 8) | tmp_XLSB;
if(tmp & (1 << 23))
tmp = tmp | 0XFF000000; // Set left bits to one for 2's complement conversion of negitive number
return tmp;
}
float get_praw_sc()
{
int32_t praw = get_praw();
return (float(praw)/get_pressure_scale_factor());
}
float get_pcomp()
{
int32_t c00,c10;
int16_t c01,c11,c20,c21,c30;
c00 = get_c00();
c10 = get_c10();
c01 = get_c01();
c11 = get_c11();
c20 = get_c20();
c21 = get_c21();
c30 = get_c30();
float traw_sc = get_traw_sc();
float praw_sc = get_praw_sc();
return float(c00) + praw_sc * (float(c10) + praw_sc * (float(c20) + praw_sc * float(c30))) + traw_sc * float(c01) + traw_sc * praw_sc * ( float(c11) + praw_sc * float(c21));
}
float get_pressure()
{
return get_pcomp() / 100; // convert to mb
}
float get_pressure_scale_factor()
{
float k;
uint8_t tmp_Byte;
tmp_Byte = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X06); // MSB
tmp_Byte = tmp_Byte & 0B00000111; // Focus on 2-0 oversampling rate
switch (tmp_Byte) // oversampling rate
{
case 0B000:
k = 524288.0f;
break;
case 0B001:
k = 1572864.0f;
break;
case 0B010:
k = 3670016.0f;
break;
case 0B011:
k = 7864320.0f;
break;
case 0B100:
k = 253952.0f;
break;
case 0B101:
k = 516096.0f;
break;
case 0B110:
k = 1040384.0f;
break;
case 0B111:
k = 2088960.0f;
break;
}
return k;
}
int32_t get_praw()
{
int32_t tmp;
uint8_t tmp_MSB,tmp_LSB,tmp_XLSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X00); // MSB
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X01); // LSB
tmp_XLSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X02); // XLSB
tmp = (tmp_MSB << 8) | tmp_LSB;
tmp = (tmp << 8) | tmp_XLSB;
if(tmp & (1 << 23))
tmp = tmp | 0XFF000000; // Set left bits to one for 2's complement conversion of negitive number
return tmp;
}
int16_t get_c0()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X10);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X11);
tmp_LSB = tmp_LSB >> 4;
tmp = (tmp_MSB << 4) | tmp_LSB;
if(tmp & (1 << 11)) // Check for 2's complement negative number
tmp = tmp | 0XF000; // Set left bits to one for 2's complement conversion of negitive number
return tmp;
}
int16_t get_c1()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X11);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X12);
tmp_MSB = tmp_MSB & 0XF;
tmp = (tmp_MSB << 8) | tmp_LSB;
if(tmp & (1 << 11)) // Check for 2's complement negative number
tmp = tmp | 0XF000; // Set left bits to one for 2's complement conversion of negitive number
return tmp;
}
int32_t get_c00()
{
int32_t tmp;
uint8_t tmp_MSB,tmp_LSB,tmp_XLSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X13);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X14);
tmp_XLSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X15);
tmp = (tmp_MSB & 0x80 ? 0xFFF00000 : 0) | ((uint32_t)tmp_MSB << 12) | ((uint32_t)tmp_LSB << 4) | (((uint32_t)tmp_XLSB & 0xF0) >> 4);
return tmp;
}
int32_t get_c10()
{
int32_t tmp;
uint8_t tmp_MSB,tmp_LSB,tmp_XLSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X15); // 4 bits
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X16); // 8 bits
tmp_XLSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X17); // 8 bits
tmp = (tmp_MSB & 0x8 ? 0xFFF00000 : 0) | (((uint32_t)tmp_MSB & 0x0F) << 16) | ((uint32_t)tmp_LSB << 8) | (uint32_t)tmp_XLSB;
return tmp;
}
int16_t get_c01()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X18);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X19);
tmp = (tmp_MSB << 8) | tmp_LSB;
return tmp;
}
int16_t get_c11()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X1A);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X1B);
tmp = (tmp_MSB << 8) | tmp_LSB;
return tmp;
}
int16_t get_c20()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X1C);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X1D);
tmp = (tmp_MSB << 8) | tmp_LSB;
return tmp;
}
int16_t get_c21()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X1E);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X1F);
tmp = (tmp_MSB << 8) | tmp_LSB;
return tmp;
}
int16_t get_c30()
{
int16_t tmp;
uint8_t tmp_MSB,tmp_LSB;
tmp_MSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X20);
tmp_LSB = i2c_eeprom_read_uint8_t(SPL_CHIP_ADDRESS, 0X21);
tmp = (tmp_MSB << 8) | tmp_LSB;
return tmp;
}
void i2c_eeprom_write_uint8_t( uint8_t deviceaddress, uint8_t eeaddress, uint8_t data )
{
uint8_t rdata = data;
delay(5); // Make sure to delay log enough for EEPROM I2C refresh time
Wire.beginTransmission(deviceaddress);
Wire.write((uint8_t)(eeaddress));
Wire.write(rdata);
Wire.endTransmission();
}
uint8_t i2c_eeprom_read_uint8_t( uint8_t deviceaddress, uint8_t eeaddress )
{
uint8_t rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write(eeaddress);
Wire.endTransmission(false); // false to not release the line
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.read();
return rdata;
}

View File

@ -0,0 +1,37 @@
#include "Arduino.h"
void SPL_init(uint8_t spl_address=0x76);
uint8_t get_spl_id(); // Get ID Register 0x0D
uint8_t get_spl_prs_cfg(); // Get PRS_CFG Register 0x06
uint8_t get_spl_tmp_cfg(); // Get TMP_CFG Register 0x07
uint8_t get_spl_meas_cfg(); // Get MEAS_CFG Register 0x08
uint8_t get_spl_cfg_reg(); // Get CFG_REG Register 0x09
uint8_t get_spl_int_sts(); // Get INT_STS Register 0x0A
uint8_t get_spl_fifo_sts(); // Get FIFO_STS Register 0x0B
int32_t get_traw();
float get_traw_sc();
float get_temp_c();
float get_temperature_scale_factor();
int32_t get_praw();
float get_praw_sc();
float get_pcomp();
float get_pressure_scale_factor();
float get_pressure();
int16_t get_c0();
int16_t get_c1();
int32_t get_c00();
int32_t get_c10();
int16_t get_c01();
int16_t get_c11();
int16_t get_c20();
int16_t get_c21();
int16_t get_c30();
void i2c_eeprom_write_uint8_t( uint8_t deviceaddress, uint8_t eeaddress, uint8_t data );
uint8_t i2c_eeprom_read_uint8_t( uint8_t deviceaddress, uint8_t eeaddress );

View File

@ -8,6 +8,7 @@
#include "be_object.h"
#include "be_mem.h"
#include <string.h>
#include <math.h>
#if BE_USE_JSON_MODULE
@ -515,6 +516,15 @@ static void value_dump(bvm *vm, int *indent, int idx, int fmt)
} else if (be_isnil(vm, idx)) { /* convert to json null */
be_stack_require(vm, 1 + BE_STACK_FREE_MIN);
be_pushstring(vm, "null");
} else if (be_isreal(vm, idx)) {
be_stack_require(vm, 1 + BE_STACK_FREE_MIN);
breal v = be_toreal(vm, idx);
if (isnan(v) || isinf(v)) {
be_pushstring(vm, "null");
} else {
be_tostring(vm, idx);
be_pushvalue(vm, idx); /* push to top */
};
} else if (be_isnumber(vm, idx) || be_isbool(vm, idx)) { /* convert to json number and boolean */
be_stack_require(vm, 1 + BE_STACK_FREE_MIN);
be_tostring(vm, idx);

View File

@ -45,6 +45,17 @@ static int m_isnan(bvm *vm)
be_return(vm);
}
static int m_isinf(bvm *vm)
{
if (be_top(vm) >= 1 && be_isreal(vm, 1)) {
breal x = be_toreal(vm, 1);
be_pushbool(vm, isinf(x));
} else {
be_pushbool(vm, bfalse);
}
be_return(vm);
}
static int m_abs(bvm *vm)
{
if (be_top(vm) >= 1 && be_isnumber(vm, 1)) {
@ -284,6 +295,7 @@ static int m_rand(bvm *vm)
#if !BE_USE_PRECOMPILED_OBJECT
be_native_module_attr_table(math) {
be_native_module_function("isnan", m_isnan),
be_native_module_function("isinf", m_isinf),
be_native_module_function("abs", m_abs),
be_native_module_function("ceil", m_ceil),
be_native_module_function("floor", m_floor),
@ -308,6 +320,7 @@ be_native_module_attr_table(math) {
be_native_module_function("rand", m_rand),
be_native_module_real("pi", M_PI),
be_native_module_real("nan", NAN),
be_native_module_real("inf", INFINITY),
be_native_module_int("imax", M_IMAX),
be_native_module_int("imin", M_IMIN),
};
@ -317,6 +330,7 @@ be_define_native_module(math, NULL);
/* @const_object_info_begin
module math (scope: global, depend: BE_USE_MATH_MODULE) {
isnan, func(m_isnan)
isinf, func(m_isinf)
abs, func(m_abs)
ceil, func(m_ceil)
floor, func(m_floor)
@ -341,6 +355,7 @@ module math (scope: global, depend: BE_USE_MATH_MODULE) {
rand, func(m_rand)
pi, real(M_PI)
nan, real(NAN)
inf, real(INFINITY)
imax, int(M_IMAX)
imin, int(M_IMIN)
}

View File

@ -10,5 +10,37 @@ assert(math.isnan(n*0))
assert(!math.isnan(0))
assert(!math.isnan(1.5))
assert(!math.isnan(math.inf))
assert(n != n) #- nan is never identical to itself -#
#- inf -#
i = math.inf
assert(str(i) == 'inf')
assert(str(-i) == '-inf') # inf has a sign
assert(math.isinf(i))
assert(math.isinf(i+i))
assert(math.isinf(i+1))
# the following result in nan
assert(math.isnan(i*0))
assert(math.isnan(i-i))
assert(math.isnan(i/i))
assert(!math.isinf(0))
assert(!math.isinf(1.5))
assert(!math.isinf(math.nan))
assert(i == i) #- equality works for inf -#
assert(i == i+1)
#- nan and inf convert to null in json -#
import json
m_nan = {"v": math.nan}
assert(json.dump(m_nan) == '{"v":null}')
m_inf1 = {"v": math.inf}
assert(json.dump(m_inf1) == '{"v":null}')
m_inf2 = {"v": -math.inf}
assert(json.dump(m_inf2) == '{"v":null}')
m_v = {"v": 3.5}
assert(json.dump(m_v) == '{"v":3.5}')

View File

@ -9,6 +9,7 @@
#include "esp_arduino_version.h"
extern int b_serial_init(bvm *vm);
extern int b_config_tx_en(bvm *vm);
extern int b_serial_deinit(bvm *vm);
extern int b_serial_write(bvm *vm);
@ -83,6 +84,7 @@ class be_class_serial (scope: global, name: serial) {
SERIAL_8O2, int(SERIAL_8O2)
init, func(b_serial_init)
config_tx_en, func(b_config_tx_en)
deinit, func(b_serial_deinit)
close, func(b_serial_deinit)

View File

@ -25,6 +25,7 @@ extern int w_webserver_content_response(bvm *vm);
extern int w_webserver_content_send_style(bvm *vm);
extern int w_webserver_content_flush(bvm *vm);
extern int w_webserver_content_stop(bvm *vm);
extern int w_webserver_content_close(bvm *vm);
extern int w_webserver_content_button(bvm *vm);
extern int w_webserver_html_escape(bvm *vm);
@ -153,6 +154,7 @@ module webserver (scope: global) {
content_open, func(w_webserver_content_open)
content_start, func(w_webserver_content_start)
content_stop, func(w_webserver_content_stop)
content_close, func(w_webserver_content_close)
content_button, func(w_webserver_content_button)
html_escape, func(w_webserver_html_escape)

View File

@ -63,7 +63,7 @@ int32_t Epd47::Init(void) {
hl = epd_hl_init(WAVEFORM);
epd47_buffer = epd_hl_get_framebuffer(&hl);
framebuffer = epd47_buffer;
lvgl_param.fluslines = 10;
lvgl_param.flushlines = 10;
return 0;
}

View File

@ -77,7 +77,6 @@ draw_line|lv.layer, lv.draw_line_dsc||[lv_draw_line](https://docs.lvgl.io/9.0/se
draw_line_dsc_init|lv.draw_line_dsc||[lv_draw_line_dsc_init](https://docs.lvgl.io/9.0/search.html?q=lv_draw_line_dsc_init)
draw_rect|lv.layer, lv.draw_rect_dsc, lv.area||[lv_draw_rect](https://docs.lvgl.io/9.0/search.html?q=lv_draw_rect)
draw_rect_dsc_init|lv.draw_rect_dsc||[lv_draw_rect_dsc_init](https://docs.lvgl.io/9.0/search.html?q=lv_draw_rect_dsc_init)
draw_vector|comptr||[lv_draw_vector](https://docs.lvgl.io/9.0/search.html?q=lv_draw_vector)
event_dsc_get_cb|lv.event_dsc|lv.event_cb|[lv_event_dsc_get_cb](https://docs.lvgl.io/9.0/search.html?q=lv_event_dsc_get_cb)
event_dsc_get_user_data|lv.event_dsc|comptr|[lv_event_dsc_get_user_data](https://docs.lvgl.io/9.0/search.html?q=lv_event_dsc_get_user_data)
event_register_id||int|[lv_event_register_id](https://docs.lvgl.io/9.0/search.html?q=lv_event_register_id)
@ -110,6 +109,9 @@ obj_report_style_change|lv.style||[lv_obj_report_style_change](https://docs.lvgl
obj_style_get_selector_part|int|int|[lv_obj_style_get_selector_part](https://docs.lvgl.io/9.0/search.html?q=lv_obj_style_get_selector_part)
obj_style_get_selector_state|int|int|[lv_obj_style_get_selector_state](https://docs.lvgl.io/9.0/search.html?q=lv_obj_style_get_selector_state)
objid_builtin_destroy|||[lv_objid_builtin_destroy](https://docs.lvgl.io/9.0/search.html?q=lv_objid_builtin_destroy)
palette_darken|int, int|lv.color|[lv_palette_darken](https://docs.lvgl.io/9.0/search.html?q=lv_palette_darken)
palette_lighten|int, int|lv.color|[lv_palette_lighten](https://docs.lvgl.io/9.0/search.html?q=lv_palette_lighten)
palette_main|int|lv.color|[lv_palette_main](https://docs.lvgl.io/9.0/search.html?q=lv_palette_main)
pct|int|int|[lv_pct](https://docs.lvgl.io/9.0/search.html?q=lv_pct)
pct_to_px|int, int|int|[lv_pct_to_px](https://docs.lvgl.io/9.0/search.html?q=lv_pct_to_px)
point_array_transform|comptr, int, int, int, int, comptr, bool||[lv_point_array_transform](https://docs.lvgl.io/9.0/search.html?q=lv_point_array_transform)
@ -153,41 +155,6 @@ timer_get_time_until_next||int|[lv_timer_get_time_until_next](https://docs.lvgl.
timer_handler||int|[lv_timer_handler](https://docs.lvgl.io/9.0/search.html?q=lv_timer_handler)
timer_handler_run_in_period|int|int|[lv_timer_handler_run_in_period](https://docs.lvgl.io/9.0/search.html?q=lv_timer_handler_run_in_period)
timer_periodic_handler|||[lv_timer_periodic_handler](https://docs.lvgl.io/9.0/search.html?q=lv_timer_periodic_handler)
vector_clear_area|comptr, lv.area||[lv_vector_clear_area](https://docs.lvgl.io/9.0/search.html?q=lv_vector_clear_area)
vector_dsc_add_path|comptr, comptr||[lv_vector_dsc_add_path](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_add_path)
vector_dsc_create|lv.layer|comptr|[lv_vector_dsc_create](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_create)
vector_dsc_delete|comptr||[lv_vector_dsc_delete](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_delete)
vector_dsc_identity|comptr||[lv_vector_dsc_identity](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_identity)
vector_dsc_rotate|comptr, f||[lv_vector_dsc_rotate](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_rotate)
vector_dsc_scale|comptr, f, f||[lv_vector_dsc_scale](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_scale)
vector_dsc_set_blend_mode|comptr, int||[lv_vector_dsc_set_blend_mode](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_blend_mode)
vector_dsc_set_fill_color|comptr, lv.color||[lv_vector_dsc_set_fill_color](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_color)
vector_dsc_set_fill_color32|comptr, int||[lv_vector_dsc_set_fill_color32](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_color32)
vector_dsc_set_fill_image|comptr, lv.draw_image_dsc||[lv_vector_dsc_set_fill_image](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_image)
vector_dsc_set_fill_linear_gradient|comptr, lv.grad_dsc, int||[lv_vector_dsc_set_fill_linear_gradient](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_linear_gradient)
vector_dsc_set_fill_opa|comptr, int||[lv_vector_dsc_set_fill_opa](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_opa)
vector_dsc_set_fill_radial_gradient|comptr, lv.grad_dsc, f, f, f, int||[lv_vector_dsc_set_fill_radial_gradient](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_radial_gradient)
vector_dsc_set_fill_rule|comptr, int||[lv_vector_dsc_set_fill_rule](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_fill_rule)
vector_dsc_set_stroke_cap|comptr, int||[lv_vector_dsc_set_stroke_cap](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_cap)
vector_dsc_set_stroke_color|comptr, lv.color||[lv_vector_dsc_set_stroke_color](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_color)
vector_dsc_set_stroke_color32|comptr, int||[lv_vector_dsc_set_stroke_color32](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_color32)
vector_dsc_set_stroke_dash|comptr, lv.float_arr, int||[lv_vector_dsc_set_stroke_dash](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_dash)
vector_dsc_set_stroke_join|comptr, int||[lv_vector_dsc_set_stroke_join](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_join)
vector_dsc_set_stroke_linear_gradient|comptr, lv.grad_dsc, int||[lv_vector_dsc_set_stroke_linear_gradient](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_linear_gradient)
vector_dsc_set_stroke_miter_limit|comptr, int||[lv_vector_dsc_set_stroke_miter_limit](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_miter_limit)
vector_dsc_set_stroke_opa|comptr, int||[lv_vector_dsc_set_stroke_opa](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_opa)
vector_dsc_set_stroke_radial_gradient|comptr, lv.grad_dsc, f, f, f, int||[lv_vector_dsc_set_stroke_radial_gradient](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_radial_gradient)
vector_dsc_set_stroke_width|comptr, f||[lv_vector_dsc_set_stroke_width](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_set_stroke_width)
vector_dsc_skew|comptr, f, f||[lv_vector_dsc_skew](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_skew)
vector_dsc_translate|comptr, f, f||[lv_vector_dsc_translate](https://docs.lvgl.io/9.0/search.html?q=lv_vector_dsc_translate)
vector_path_append_path|comptr, comptr||[lv_vector_path_append_path](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_append_path)
vector_path_append_rect|comptr, lv.area, f, f||[lv_vector_path_append_rect](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_append_rect)
vector_path_clear|comptr||[lv_vector_path_clear](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_clear)
vector_path_close|comptr||[lv_vector_path_close](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_close)
vector_path_copy|comptr, comptr||[lv_vector_path_copy](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_copy)
vector_path_create|int|comptr|[lv_vector_path_create](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_create)
vector_path_delete|comptr||[lv_vector_path_delete](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_delete)
vector_path_get_bounding|comptr, lv.area||[lv_vector_path_get_bounding](https://docs.lvgl.io/9.0/search.html?q=lv_vector_path_get_bounding)
version_info||string|[lv_version_info](https://docs.lvgl.io/9.0/search.html?q=lv_version_info)
version_major||int|[lv_version_major](https://docs.lvgl.io/9.0/search.html?q=lv_version_major)
version_minor||int|[lv_version_minor](https://docs.lvgl.io/9.0/search.html?q=lv_version_minor)

View File

@ -99,7 +99,6 @@ const be_ntv_func_def_t lv_func[] = {
{ "draw_line_dsc_init", { (const void*) &lv_draw_line_dsc_init, "", "(lv.draw_line_dsc)" } },
{ "draw_rect", { (const void*) &lv_draw_rect, "", "(lv.layer)(lv.draw_rect_dsc)(lv.area)" } },
{ "draw_rect_dsc_init", { (const void*) &lv_draw_rect_dsc_init, "", "(lv.draw_rect_dsc)" } },
{ "draw_vector", { (const void*) &lv_draw_vector, "", "c" } },
{ "event_dsc_get_cb", { (const void*) &lv_event_dsc_get_cb, "lv.event_cb", "(lv.event_dsc)" } },
{ "event_dsc_get_user_data", { (const void*) &lv_event_dsc_get_user_data, "c", "(lv.event_dsc)" } },
{ "event_register_id", { (const void*) &lv_event_register_id, "i", "" } },
@ -132,6 +131,9 @@ const be_ntv_func_def_t lv_func[] = {
{ "obj_style_get_selector_part", { (const void*) &lv_obj_style_get_selector_part, "i", "i" } },
{ "obj_style_get_selector_state", { (const void*) &lv_obj_style_get_selector_state, "i", "i" } },
{ "objid_builtin_destroy", { (const void*) &lv_objid_builtin_destroy, "", "" } },
{ "palette_darken", { (const void*) &lv_palette_darken, "lv.color", "ii" } },
{ "palette_lighten", { (const void*) &lv_palette_lighten, "lv.color", "ii" } },
{ "palette_main", { (const void*) &lv_palette_main, "lv.color", "i" } },
{ "pct", { (const void*) &lv_pct, "i", "i" } },
{ "pct_to_px", { (const void*) &lv_pct_to_px, "i", "ii" } },
{ "point_array_transform", { (const void*) &lv_point_array_transform, "", "ciiiicb" } },
@ -175,41 +177,6 @@ const be_ntv_func_def_t lv_func[] = {
{ "timer_handler", { (const void*) &lv_timer_handler, "i", "" } },
{ "timer_handler_run_in_period", { (const void*) &lv_timer_handler_run_in_period, "i", "i" } },
{ "timer_periodic_handler", { (const void*) &lv_timer_periodic_handler, "", "" } },
{ "vector_clear_area", { (const void*) &lv_vector_clear_area, "", "c(lv.area)" } },
{ "vector_dsc_add_path", { (const void*) &lv_vector_dsc_add_path, "", "cc" } },
{ "vector_dsc_create", { (const void*) &lv_vector_dsc_create, "c", "(lv.layer)" } },
{ "vector_dsc_delete", { (const void*) &lv_vector_dsc_delete, "", "c" } },
{ "vector_dsc_identity", { (const void*) &lv_vector_dsc_identity, "", "c" } },
{ "vector_dsc_rotate", { (const void*) &lv_vector_dsc_rotate, "", "cf" } },
{ "vector_dsc_scale", { (const void*) &lv_vector_dsc_scale, "", "cff" } },
{ "vector_dsc_set_blend_mode", { (const void*) &lv_vector_dsc_set_blend_mode, "", "ci" } },
{ "vector_dsc_set_fill_color", { (const void*) &lv_vector_dsc_set_fill_color, "", "c(lv.color)" } },
{ "vector_dsc_set_fill_color32", { (const void*) &lv_vector_dsc_set_fill_color32, "", "ci" } },
{ "vector_dsc_set_fill_image", { (const void*) &lv_vector_dsc_set_fill_image, "", "c(lv.draw_image_dsc)" } },
{ "vector_dsc_set_fill_linear_gradient", { (const void*) &lv_vector_dsc_set_fill_linear_gradient, "", "c(lv.grad_dsc)i" } },
{ "vector_dsc_set_fill_opa", { (const void*) &lv_vector_dsc_set_fill_opa, "", "ci" } },
{ "vector_dsc_set_fill_radial_gradient", { (const void*) &lv_vector_dsc_set_fill_radial_gradient, "", "c(lv.grad_dsc)fffi" } },
{ "vector_dsc_set_fill_rule", { (const void*) &lv_vector_dsc_set_fill_rule, "", "ci" } },
{ "vector_dsc_set_stroke_cap", { (const void*) &lv_vector_dsc_set_stroke_cap, "", "ci" } },
{ "vector_dsc_set_stroke_color", { (const void*) &lv_vector_dsc_set_stroke_color, "", "c(lv.color)" } },
{ "vector_dsc_set_stroke_color32", { (const void*) &lv_vector_dsc_set_stroke_color32, "", "ci" } },
{ "vector_dsc_set_stroke_dash", { (const void*) &lv_vector_dsc_set_stroke_dash, "", "c(lv.float_arr)i" } },
{ "vector_dsc_set_stroke_join", { (const void*) &lv_vector_dsc_set_stroke_join, "", "ci" } },
{ "vector_dsc_set_stroke_linear_gradient", { (const void*) &lv_vector_dsc_set_stroke_linear_gradient, "", "c(lv.grad_dsc)i" } },
{ "vector_dsc_set_stroke_miter_limit", { (const void*) &lv_vector_dsc_set_stroke_miter_limit, "", "ci" } },
{ "vector_dsc_set_stroke_opa", { (const void*) &lv_vector_dsc_set_stroke_opa, "", "ci" } },
{ "vector_dsc_set_stroke_radial_gradient", { (const void*) &lv_vector_dsc_set_stroke_radial_gradient, "", "c(lv.grad_dsc)fffi" } },
{ "vector_dsc_set_stroke_width", { (const void*) &lv_vector_dsc_set_stroke_width, "", "cf" } },
{ "vector_dsc_skew", { (const void*) &lv_vector_dsc_skew, "", "cff" } },
{ "vector_dsc_translate", { (const void*) &lv_vector_dsc_translate, "", "cff" } },
{ "vector_path_append_path", { (const void*) &lv_vector_path_append_path, "", "cc" } },
{ "vector_path_append_rect", { (const void*) &lv_vector_path_append_rect, "", "c(lv.area)ff" } },
{ "vector_path_clear", { (const void*) &lv_vector_path_clear, "", "c" } },
{ "vector_path_close", { (const void*) &lv_vector_path_close, "", "c" } },
{ "vector_path_copy", { (const void*) &lv_vector_path_copy, "", "cc" } },
{ "vector_path_create", { (const void*) &lv_vector_path_create, "c", "i" } },
{ "vector_path_delete", { (const void*) &lv_vector_path_delete, "", "c" } },
{ "vector_path_get_bounding", { (const void*) &lv_vector_path_get_bounding, "", "c(lv.area)" } },
{ "version_info", { (const void*) &lv_version_info, "s", "" } },
{ "version_major", { (const void*) &lv_version_major, "i", "" } },
{ "version_minor", { (const void*) &lv_version_minor, "i", "" } },
@ -947,39 +914,6 @@ const be_const_member_t lv0_constants[] = {
{ "TEXT_FLAG_EXPAND", be_cconst_int(LV_TEXT_FLAG_EXPAND) },
{ "TEXT_FLAG_FIT", be_cconst_int(LV_TEXT_FLAG_FIT) },
{ "TEXT_FLAG_NONE", be_cconst_int(LV_TEXT_FLAG_NONE) },
{ "VECTOR_BLEND_ADDITIVE", be_cconst_int(LV_VECTOR_BLEND_ADDITIVE) },
{ "VECTOR_BLEND_DST_IN", be_cconst_int(LV_VECTOR_BLEND_DST_IN) },
{ "VECTOR_BLEND_DST_OVER", be_cconst_int(LV_VECTOR_BLEND_DST_OVER) },
{ "VECTOR_BLEND_MULTIPLY", be_cconst_int(LV_VECTOR_BLEND_MULTIPLY) },
{ "VECTOR_BLEND_NONE", be_cconst_int(LV_VECTOR_BLEND_NONE) },
{ "VECTOR_BLEND_SCREEN", be_cconst_int(LV_VECTOR_BLEND_SCREEN) },
{ "VECTOR_BLEND_SRC_IN", be_cconst_int(LV_VECTOR_BLEND_SRC_IN) },
{ "VECTOR_BLEND_SRC_OVER", be_cconst_int(LV_VECTOR_BLEND_SRC_OVER) },
{ "VECTOR_BLEND_SUBTRACTIVE", be_cconst_int(LV_VECTOR_BLEND_SUBTRACTIVE) },
{ "VECTOR_DRAW_STYLE_GRADIENT", be_cconst_int(LV_VECTOR_DRAW_STYLE_GRADIENT) },
{ "VECTOR_DRAW_STYLE_PATTERN", be_cconst_int(LV_VECTOR_DRAW_STYLE_PATTERN) },
{ "VECTOR_DRAW_STYLE_SOLID", be_cconst_int(LV_VECTOR_DRAW_STYLE_SOLID) },
{ "VECTOR_FILL_EVENODD", be_cconst_int(LV_VECTOR_FILL_EVENODD) },
{ "VECTOR_FILL_NONZERO", be_cconst_int(LV_VECTOR_FILL_NONZERO) },
{ "VECTOR_GRADIENT_SPREAD_PAD", be_cconst_int(LV_VECTOR_GRADIENT_SPREAD_PAD) },
{ "VECTOR_GRADIENT_SPREAD_REFLECT", be_cconst_int(LV_VECTOR_GRADIENT_SPREAD_REFLECT) },
{ "VECTOR_GRADIENT_SPREAD_REPEAT", be_cconst_int(LV_VECTOR_GRADIENT_SPREAD_REPEAT) },
{ "VECTOR_GRADIENT_STYLE_LINEAR", be_cconst_int(LV_VECTOR_GRADIENT_STYLE_LINEAR) },
{ "VECTOR_GRADIENT_STYLE_RADIAL", be_cconst_int(LV_VECTOR_GRADIENT_STYLE_RADIAL) },
{ "VECTOR_PATH_OP_CLOSE", be_cconst_int(LV_VECTOR_PATH_OP_CLOSE) },
{ "VECTOR_PATH_OP_CUBIC_TO", be_cconst_int(LV_VECTOR_PATH_OP_CUBIC_TO) },
{ "VECTOR_PATH_OP_LINE_TO", be_cconst_int(LV_VECTOR_PATH_OP_LINE_TO) },
{ "VECTOR_PATH_OP_MOVE_TO", be_cconst_int(LV_VECTOR_PATH_OP_MOVE_TO) },
{ "VECTOR_PATH_OP_QUAD_TO", be_cconst_int(LV_VECTOR_PATH_OP_QUAD_TO) },
{ "VECTOR_PATH_QUALITY_HIGH", be_cconst_int(LV_VECTOR_PATH_QUALITY_HIGH) },
{ "VECTOR_PATH_QUALITY_LOW", be_cconst_int(LV_VECTOR_PATH_QUALITY_LOW) },
{ "VECTOR_PATH_QUALITY_MEDIUM", be_cconst_int(LV_VECTOR_PATH_QUALITY_MEDIUM) },
{ "VECTOR_STROKE_CAP_BUTT", be_cconst_int(LV_VECTOR_STROKE_CAP_BUTT) },
{ "VECTOR_STROKE_CAP_ROUND", be_cconst_int(LV_VECTOR_STROKE_CAP_ROUND) },
{ "VECTOR_STROKE_CAP_SQUARE", be_cconst_int(LV_VECTOR_STROKE_CAP_SQUARE) },
{ "VECTOR_STROKE_JOIN_BEVEL", be_cconst_int(LV_VECTOR_STROKE_JOIN_BEVEL) },
{ "VECTOR_STROKE_JOIN_MITER", be_cconst_int(LV_VECTOR_STROKE_JOIN_MITER) },
{ "VECTOR_STROKE_JOIN_ROUND", be_cconst_int(LV_VECTOR_STROKE_JOIN_ROUND) },
{ "ZOOM_NONE", be_cconst_int(LV_SCALE_NONE) },
{ "&anim_path_bounce", be_cconst_ptr(&lv_anim_path_bounce) },
{ "&anim_path_ease_in", be_cconst_ptr(&lv_anim_path_ease_in) },

View File

@ -335,47 +335,14 @@ LV_STRIDE_AUTO
LV_RADIUS_CIRCLE
// File: ../../lvgl/src/draw/lv_draw_triangle.h
// File: ../../lvgl/src/draw/lv_draw_vector.h
LV_VECTOR_FILL_NONZERO
LV_VECTOR_FILL_EVENODD
LV_VECTOR_STROKE_CAP_BUTT
LV_VECTOR_STROKE_CAP_SQUARE
LV_VECTOR_STROKE_CAP_ROUND
LV_VECTOR_STROKE_JOIN_MITER
LV_VECTOR_STROKE_JOIN_BEVEL
LV_VECTOR_STROKE_JOIN_ROUND
LV_VECTOR_PATH_QUALITY_MEDIUM
LV_VECTOR_PATH_QUALITY_HIGH
LV_VECTOR_PATH_QUALITY_LOW
LV_VECTOR_BLEND_SRC_OVER
LV_VECTOR_BLEND_SRC_IN
LV_VECTOR_BLEND_DST_OVER
LV_VECTOR_BLEND_DST_IN
LV_VECTOR_BLEND_SCREEN
LV_VECTOR_BLEND_MULTIPLY
LV_VECTOR_BLEND_NONE
LV_VECTOR_BLEND_ADDITIVE
LV_VECTOR_BLEND_SUBTRACTIVE
LV_VECTOR_PATH_OP_MOVE_TO
LV_VECTOR_PATH_OP_LINE_TO
LV_VECTOR_PATH_OP_QUAD_TO
LV_VECTOR_PATH_OP_CUBIC_TO
LV_VECTOR_PATH_OP_CLOSE
LV_VECTOR_DRAW_STYLE_SOLID
LV_VECTOR_DRAW_STYLE_PATTERN
LV_VECTOR_DRAW_STYLE_GRADIENT
LV_VECTOR_GRADIENT_SPREAD_PAD
LV_VECTOR_GRADIENT_SPREAD_REPEAT
LV_VECTOR_GRADIENT_SPREAD_REFLECT
LV_VECTOR_GRADIENT_STYLE_LINEAR
LV_VECTOR_GRADIENT_STYLE_RADIAL
// File: ../../lvgl/src/draw/lv_image_decoder.h
LV_IMAGE_SRC_VARIABLE

View File

@ -613,61 +613,6 @@ void lv_draw_triangle_dsc_init(lv_draw_triangle_dsc_t * draw_dsc)
lv_draw_triangle_dsc_t * lv_draw_task_get_triangle_dsc(lv_draw_task_t * task)
void lv_draw_triangle(lv_layer_t * layer, const lv_draw_triangle_dsc_t * draw_dsc)
// ../../lvgl/src/draw/lv_draw_vector.h
void lv_matrix_identity(lv_matrix_t * matrix)
void lv_matrix_translate(lv_matrix_t * matrix, float tx, float ty)
void lv_matrix_scale(lv_matrix_t * matrix, float scale_x, float scale_y)
void lv_matrix_rotate(lv_matrix_t * matrix, float degree)
void lv_matrix_skew(lv_matrix_t * matrix, float skew_x, float skew_y)
void lv_matrix_multiply(lv_matrix_t * matrix, const lv_matrix_t * matrix2)
void lv_matrix_transform_point(const lv_matrix_t * matrix, lv_fpoint_t * point)
void lv_matrix_transform_path(const lv_matrix_t * matrix, lv_vector_path_t * path)
lv_vector_path_t * lv_vector_path_create(lv_vector_path_quality_t quality)
void lv_vector_path_copy(lv_vector_path_t * target_path, const lv_vector_path_t * path)
void lv_vector_path_clear(lv_vector_path_t * path)
void lv_vector_path_delete(lv_vector_path_t * path)
void lv_vector_path_move_to(lv_vector_path_t * path, const lv_fpoint_t * p)
void lv_vector_path_line_to(lv_vector_path_t * path, const lv_fpoint_t * p)
void lv_vector_path_quad_to(lv_vector_path_t * path, const lv_fpoint_t * p1, const lv_fpoint_t * p2)
void lv_vector_path_cubic_to(lv_vector_path_t * path, const lv_fpoint_t * p1, const lv_fpoint_t * p2, const lv_fpoint_t * p3)
void lv_vector_path_close(lv_vector_path_t * path)
void lv_vector_path_get_bounding(const lv_vector_path_t * path, lv_area_t * area)
void lv_vector_path_append_rect(lv_vector_path_t * path, const lv_area_t * rect, float rx, float ry)
void lv_vector_path_append_circle(lv_vector_path_t * path, const lv_fpoint_t * c, float rx, float ry)
void lv_vector_path_append_arc(lv_vector_path_t * path, const lv_fpoint_t * c, float radius, float start_angle, float sweep, bool pie)
void lv_vector_path_append_path(lv_vector_path_t * path, const lv_vector_path_t * subpath)
lv_vector_dsc_t * lv_vector_dsc_create(lv_layer_t * layer)
void lv_vector_dsc_delete(lv_vector_dsc_t * dsc)
void lv_vector_dsc_set_transform(lv_vector_dsc_t * dsc, const lv_matrix_t * matrix)
void lv_vector_dsc_set_blend_mode(lv_vector_dsc_t * dsc, lv_vector_blend_t blend)
void lv_vector_dsc_set_fill_color32(lv_vector_dsc_t * dsc, lv_color32_t color)
void lv_vector_dsc_set_fill_color(lv_vector_dsc_t * dsc, lv_color_t color)
void lv_vector_dsc_set_fill_opa(lv_vector_dsc_t * dsc, lv_opa_t opa)
void lv_vector_dsc_set_fill_rule(lv_vector_dsc_t * dsc, lv_vector_fill_t rule)
void lv_vector_dsc_set_fill_image(lv_vector_dsc_t * dsc, const lv_draw_image_dsc_t * img_dsc)
void lv_vector_dsc_set_fill_linear_gradient(lv_vector_dsc_t * dsc, const lv_grad_dsc_t * grad, lv_vector_gradient_spread_t spread)
void lv_vector_dsc_set_fill_radial_gradient(lv_vector_dsc_t * dsc, const lv_grad_dsc_t * grad, float cx, float cy, float radius, lv_vector_gradient_spread_t spread)
void lv_vector_dsc_set_fill_transform(lv_vector_dsc_t * dsc, const lv_matrix_t * matrix)
void lv_vector_dsc_set_stroke_color32(lv_vector_dsc_t * dsc, lv_color32_t color)
void lv_vector_dsc_set_stroke_color(lv_vector_dsc_t * dsc, lv_color_t color)
void lv_vector_dsc_set_stroke_opa(lv_vector_dsc_t * dsc, lv_opa_t opa)
void lv_vector_dsc_set_stroke_width(lv_vector_dsc_t * dsc, float width)
void lv_vector_dsc_set_stroke_dash(lv_vector_dsc_t * dsc, float * dash_pattern, uint16_t dash_count)
void lv_vector_dsc_set_stroke_cap(lv_vector_dsc_t * dsc, lv_vector_stroke_cap_t cap)
void lv_vector_dsc_set_stroke_join(lv_vector_dsc_t * dsc, lv_vector_stroke_join_t join)
void lv_vector_dsc_set_stroke_miter_limit(lv_vector_dsc_t * dsc, uint16_t miter_limit)
void lv_vector_dsc_set_stroke_linear_gradient(lv_vector_dsc_t * dsc, const lv_grad_dsc_t * grad, lv_vector_gradient_spread_t spread)
void lv_vector_dsc_set_stroke_radial_gradient(lv_vector_dsc_t * dsc, const lv_grad_dsc_t * grad, float cx, float cy, float radius, lv_vector_gradient_spread_t spread)
void lv_vector_dsc_set_stroke_transform(lv_vector_dsc_t * dsc, const lv_matrix_t * matrix)
void lv_vector_dsc_identity(lv_vector_dsc_t * dsc)
void lv_vector_dsc_scale(lv_vector_dsc_t * dsc, float scale_x, float scale_y)
void lv_vector_dsc_rotate(lv_vector_dsc_t * dsc, float degree)
void lv_vector_dsc_translate(lv_vector_dsc_t * dsc, float tx, float ty)
void lv_vector_dsc_skew(lv_vector_dsc_t * dsc, float skew_x, float skew_y)
void lv_vector_dsc_add_path(lv_vector_dsc_t * dsc, const lv_vector_path_t * path)
void lv_vector_clear_area(lv_vector_dsc_t * dsc, const lv_area_t * rect)
void lv_draw_vector(lv_vector_dsc_t * dsc)
// ../../lvgl/src/font/lv_font.h
const void * lv_font_get_glyph_bitmap(lv_font_glyph_dsc_t * g_dsc, uint32_t letter, lv_draw_buf_t * draw_buf)
bool lv_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t letter, uint32_t letter_next)
@ -857,6 +802,11 @@ void lv_event_stop_bubbling(lv_event_t * e)
void lv_event_stop_processing(lv_event_t * e)
uint32_t lv_event_register_id(void)
// ../../lvgl/src/misc/lv_palette.h
lv_color_t lv_palette_main(lv_palette_t p)
lv_color_t lv_palette_lighten(lv_palette_t p, uint8_t lvl)
lv_color_t lv_palette_darken(lv_palette_t p, uint8_t lvl)
// ../../lvgl/src/misc/lv_style.h
void lv_style_init(lv_style_t * style)
void lv_style_reset(lv_style_t * style)

View File

@ -278,6 +278,8 @@ class type_mapper_class:
"lv_style_prop_t []",
"lv_calendar_date_t []",
"lv_indev_read_cb_t",
"lv_vector_path_t *",
"lv_vector_path_quality_t",
]
return_types = {
@ -299,7 +301,7 @@ class type_mapper_class:
"constchar *": "s", # special construct
# "lv_obj_user_data_t": "i",
"lv_result_t": "i",
"float": "f",
# "float": "f",
"lv_coord_t": "i",
"lv_opa_t": "i",
@ -348,29 +350,30 @@ class type_mapper_class:
"lv_scale_mode_t": "i",
"lv_span_overflow_t": "i",
"lv_span_mode_t": "i",
"lv_vector_path_t *": "c", # treat as opaque pointer
"lv_vector_dsc_t *": "c", # treat as opaque pointer
# "lv_vector_path_t *": "c", # treat as opaque pointer
# "lv_vector_dsc_t *": "c", # treat as opaque pointer
"lv_point_t *": "c", # treat as opaque pointer
"lv_hit_test_info_t *": "c", # treat as opaque pointer
"lv_screen_load_anim_t": "i",
"lv_display_render_mode_t": "i",
"lv_vector_gradient_spread_t": "i",
# "lv_vector_gradient_spread_t": "i",
"lv_cover_res_t": "i",
"lv_vector_path_quality_t": "i",
"lv_vector_blend_t": "i",
"lv_vector_fill_t": "i",
"lv_vector_stroke_cap_t": "i",
"lv_vector_stroke_join_t": "i",
# "lv_vector_path_quality_t": "i",
# "lv_vector_blend_t": "i",
# "lv_vector_fill_t": "i",
# "lv_vector_stroke_cap_t": "i",
# "lv_vector_stroke_join_t": "i",
"lv_font_kerning_t": "i",
"lv_menu_mode_header_t": "i",
"lv_menu_mode_root_back_button_t": "i",
"lv_point_precise_t []": "lv_point_arr",
"lv_obj_point_transform_flag_t": "i",
"lv_palette_t": "i",
"int32_t *": "lv_int_arr",
"int32_t []": "lv_int_arr",
"uint32_t *": "lv_int_arr",
"float *": "lv_float_arr",
# "float *": "lv_float_arr",
# layouts
"lv_flex_align_t": "i",
"lv_flex_flow_t": "i",

View File

@ -64,13 +64,14 @@ lv_fun_globs = [
"draw/lv_draw_mask.h",
"draw/lv_draw_rect.h",
"draw/lv_draw_triangle.h",
"draw/lv_draw_vector.h",
# "draw/lv_draw_vector.h",
"draw/lv_draw.h",
"display/*.h",
"misc/lv_anim.h",
"misc/lv_area.h",
"misc/lv_color.h",
"misc/lv_color_op.h",
"misc/lv_palette.h",
"misc/lv_event.h",
"misc/lv_style_gen.h",
"misc/lv_style.h",
@ -380,6 +381,7 @@ for header_name in headers_names:
for exclude_prefix in ["_", "LV_BIDI_DIR_", "LV_FONT_",
"LV_SIGNAL_", "LV_TEMPL_", "LV_TASK_PRIO_", "LV_THEME_",
"LV_LRU_",
"LV_VECTOR_",
"LV_KEYBOARD_MODE_TEXT_ARABIC"]:
if enum_item.startswith(exclude_prefix): exclude = True
if exclude: continue

View File

@ -763,13 +763,17 @@ class lvh_obj : lvh_root
end
end
def get_label_mode()
if self._lv_label != nil
return self._lv_label.get_long_mode()
end
end
#====================================================================
# `align`: `left`, `center`, `right`
#====================================================================
def set_align(t)
def set_align(t, m)
var align
if (m == 0) m = 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -# end
self.check_label()
if t == 0 || t == "left"
align = lv.TEXT_ALIGN_LEFT
@ -778,12 +782,13 @@ class lvh_obj : lvh_root
elif t == 2 || t == "right"
align = lv.TEXT_ALIGN_RIGHT
end
self._lv_label.set_style_text_align(align, 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#)
self._lv_label.set_style_text_align(align, m)
end
def get_align()
def get_align(m)
if (m == 0) m = 0 #- lv.PART_MAIN | lv.STATE_DEFAULT -# end
if self._lv_label == nil return nil end
var align self._lv_label.get_style_text_align(0 #- lv.PART_MAIN | lv.STATE_DEFAULT -#)
var align = self._lv_label.get_style_text_align(m)
if align == lv.TEXT_ALIGN_LEFT
return "left"
elif align == lv.TEXT_ALIGN_CENTER
@ -791,7 +796,7 @@ class lvh_obj : lvh_root
elif align == lv.TEXT_ALIGN_RIGHT
return "right"
else
return nil
return align
end
end
@ -1080,10 +1085,10 @@ end
#################################################################################
#====================================================================
# flex
# fixed - container for a box with fixed sub-objects (no placement)
#====================================================================
#@ solidify:lvh_flex,weak
class lvh_flex : lvh_obj
#@ solidify:lvh_fixed,weak
class lvh_fixed : lvh_obj
# static var _lv_class = lv.obj # from parent class
# label do not need a sub-label
def post_init()
@ -1095,6 +1100,19 @@ class lvh_flex : lvh_obj
obj.set_style_margin_all(0, 0)
obj.set_style_bg_opa(0, 0)
obj.set_size(lv.pct(100), lv.pct(100))
end
end
#====================================================================
# flex - container for sub-objects placed along with flex directives
#====================================================================
#@ solidify:lvh_flex,weak
class lvh_flex : lvh_fixed
# static var _lv_class = lv.obj # from parent class
# label do not need a sub-label
def post_init()
super(self).post_init() # call super
var obj = self._lv_obj
obj.set_flex_flow(lv.FLEX_FLOW_ROW)
end
end
@ -1415,6 +1433,7 @@ end
#@ solidify:lvh_dropdown,weak
class lvh_dropdown : lvh_obj
static var _lv_class = lv.dropdown
var _symbol # we need to keep a reference to the string used for symbol to avoid GC
static var _dir = [ lv.DIR_BOTTOM, lv.DIR_TOP, lv.DIR_LEFT, lv.DIR_RIGHT ] # 0 = down, 1 = up, 2 = left, 3 = right
def set_val(t)
@ -1445,8 +1464,16 @@ class lvh_dropdown : lvh_obj
# direction needs a conversion from HASPmota numbers and LVGL's
def set_direction(t)
t = int(t)
# 0 = down, 1 = up, 2 = left, 3 = right
self._lv_obj.set_dir(self._dir[int(t)])
if (t < 0) || (t > 3) t = 0 end
self._lv_obj.set_dir(self._dir[t])
if t == 1 self._symbol = lv.SYMBOL_UP
elif t == 2 self._symbol = lv.SYMBOL_LEFT
elif t == 3 self._symbol = lv.SYMBOL_RIGHT
else self._symbol = lv.SYMBOL_DOWN
end
self._lv_obj.set_symbol(self._symbol)
end
def get_direction()
var dir = self._lv_obj.get_dir()
@ -1470,6 +1497,24 @@ class lvh_dropdown : lvh_obj
return (static_text == nil)
end
end
#====================================================================
# dropdown_list (accessing the list object)
#====================================================================
#@ solidify:lvh_dropdown_list,weak
class lvh_dropdown_list : lvh_obj
static var _lv_class = nil
def post_init()
self._lv_obj = nil # default to nil object, whatever it was initialized with
# check if it is the parent is a spangroup
if isinstance(self._parent_lvh, self._page._oh.lvh_dropdown)
self._lv_obj = lv.list(self._parent_lvh._lv_obj.get_list()._p)
else
print("HSP: '_dropdown_list' should have a parent of type 'dropdown'")
end
# super(self).post_init() # call super - don't call post_init to not register a callback
end
end
#====================================================================
# bar
@ -2180,6 +2225,7 @@ class HASPmota
# assign lvh_page to a static attribute
static lvh_root = lvh_root
static lvh_obj = lvh_obj
static lvh_fixed = lvh_fixed
static lvh_flex = lvh_flex
static lvh_page = lvh_page
static lvh_scr = lvh_scr
@ -2193,6 +2239,7 @@ class HASPmota
static lvh_line = lvh_line
static lvh_img = lvh_img
static lvh_dropdown = lvh_dropdown
static lvh_dropdown_list = lvh_dropdown_list
static lvh_roller = lvh_roller
static lvh_btnmatrix = lvh_btnmatrix
# static lvh_msgbox = lvh_msgbox

View File

@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
safeboot, app, factory, 0x10000, 0xD0000,
app0, app, ota_0, 0xE0000, 0x3D0000,
spiffs, data, spiffs, 0x4B0000,0x150000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 safeboot app factory 0x10000 0xD0000
5 app0 app ota_0 0xE0000 0x3D0000
6 spiffs data spiffs 0x4B0000 0x150000

View File

@ -335,6 +335,35 @@ def esp32_use_external_crashreport(*args, **kwargs):
)
print(Fore.YELLOW + output[0]+": \n"+output[1]+" in "+output[2])
def reset_target(*args, **kwargs):
esptoolpy = join(platform.get_package_dir("tool-esptoolpy") or "", "esptool.py")
upload_port = join(env.get("UPLOAD_PORT", "none"))
if "none" in upload_port:
env.AutodetectUploadPort()
upload_port = join(env.get("UPLOAD_PORT", "none"))
esptoolpy_flags = [
"--no-stub",
"--chip", mcu,
"--port", upload_port,
"flash_id"
]
esptoolpy_cmd = [env["PYTHONEXE"], esptoolpy] + esptoolpy_flags
print("Try to reset device")
subprocess.call(esptoolpy_cmd, shell=False)
env.AddCustomTarget(
name="reset_target",
dependencies=None,
actions=[
reset_target
],
title="Reset ESP32 target",
description="This command resets ESP32x target via esptoolpy",
)
env.AddCustomTarget(
name="downloadfs",
dependencies=None,

View File

@ -141,11 +141,6 @@ def esp32_create_chip_string(chip):
print(Fore.YELLOW + "Unexpected naming convention in this build environment:" + Fore.RED, tasmota_platform_org)
print(Fore.YELLOW + "Expected build environment name like " + Fore.GREEN + "'tasmota" + chip[3:] + "-whatever-you-want'")
print(Fore.YELLOW + "Please correct your actual build environment, to avoid undefined behavior in build process!!")
if "-DUSE_USB_CDC_CONSOLE" in env.BoardConfig().get("build.extra_flags") and "cdc" not in tasmota_platform:
tasmota_platform += "cdc"
print(Fore.YELLOW + "Board definition uses CDC configuration, but environment name does not -> fix by adding 'cdc'")
print(Fore.YELLOW + "Expected build environment name like " + Fore.GREEN + "'tasmota" + chip[3:] + "cdc-whatever-you-want'")
print(Fore.YELLOW + "Please correct your actual build environment, to avoid undefined behavior in build process!!")
return tasmota_platform
def esp32_build_filesystem(fs_size):

View File

@ -28,20 +28,23 @@ default_envs =
; tasmota-zbbridge
; tasmota-ir
; tasmota32
; tasmota32solo1
; tasmota32s2
; tasmota32s2cdc
; tasmota32s3
; tasmota32c2
; tasmota32c3
; tasmota32c6
; tasmota32-zbbrdgpro
; tasmota32-bluetooth
; tasmota32-webcam
; tasmota32-knx
; tasmota32-lvgl
; tasmota32-ir
; tasmota32solo1
; tasmota32-nspanel
; tasmota32c2
; tasmota32c3cdc
; tasmota32c6cdc
; tasmota32s2
; tasmota32s2cdc
; tasmota32s3cdc
; tasmota32c3ser
; tasmota32c6ser
; tasmota32s3ser
[tasmota]
; *** Global build / unbuild compile time flags for ALL Tasmota / Tasmota32 [env]

View File

@ -20,6 +20,17 @@ build_flags = ${env:tasmota32_base.build_flags}
-DUSE_WIFI_RANGE_EXTENDER_NAPT
-DOTA_URL='""'
; remove PSRAM support -> avoid "blinking" of GPIO 16/17 at boot
[env:tasmota32-nopsram]
extends = env:tasmota32
build_unflags = ${env:tasmota32_base.build_unflags}
-DBOARD_HAS_PSRAM
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DDISABLE_PSRAMCHECK
-DCODE_IMAGE_STR='"tasmota32-nopsram"'
-DOTA_URL='""'
[env:tasmota32s3-file]
extends = env:tasmota32_base
board = esp32s3-qio_qspi
@ -45,6 +56,17 @@ build_flags = ${env:tasmota32_base.build_flags}
-DUSE_LVGL_OPENHASP
-DOTA_URL='""'
[env:tasmota32s3-qio_opi_120]
; device needs >= 8MB Flash!!
extends = env:tasmota32_base
board = esp32s3-qio_opi_120
board_build.partitions = partitions/esp32_partition_app3904k_fs3392k.csv
build_flags = ${env:tasmota32_base.build_flags}
-DUSE_BERRY_ULP
-DFIRMWARE_LVGL
-DUSE_LVGL_OPENHASP
-DOTA_URL='""'
[env:tasmota32s3-opi_opi]
extends = env:tasmota32_base
board = esp32s3-opi_opi
@ -56,20 +78,9 @@ build_flags = ${env:tasmota32_base.build_flags}
-DUSE_LVGL_OPENHASP
-DOTA_URL='""'
[env:tasmota32s3cdc-opi_opi]
[env:tasmota32c3-bluetooth]
extends = env:tasmota32_base
board = esp32s3cdc-opi_opi
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
build_flags = ${env:tasmota32_base.build_flags}
-DUSE_BERRY_ULP
-DFIRMWARE_LVGL
-DUSE_LVGL_OPENHASP
-DOTA_URL='""'
[env:tasmota32c3cdc-bluetooth]
extends = env:tasmota32_base
board = esp32c3cdc
board = esp32c3
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
@ -79,9 +90,9 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio
lib_ignore = Micro-RTSP
[env:tasmota32s3cdc-bluetooth]
[env:tasmota32s3-bluetooth]
extends = env:tasmota32_base
board = esp32s3cdc-qio_qspi
board = esp32s3-qio_qspi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_BLUETOOTH
-DOTA_URL='""'
@ -97,9 +108,9 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_div, lib/lib_ssl
lib_ignore = Micro-RTSP
[env:tasmota32c3cdc-mi32]
[env:tasmota32c3-mi32]
extends = env:tasmota32_base
board = esp32c3cdc
board = esp32c3
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
@ -109,9 +120,9 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_div, lib/lib_ssl
lib_ignore = Micro-RTSP
[env:tasmota32s3cdc-mi32]
[env:tasmota32s3-mi32]
extends = env:tasmota32_base
board = esp32s3cdc-qio_qspi
board = esp32s3-qio_qspi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_BLUETOOTH
-DUSE_MI_EXT_GUI
@ -119,9 +130,9 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/libesp32, lib/libesp32_div, lib/lib_basic, lib/lib_i2c, lib/lib_div, lib/lib_ssl
lib_ignore = Micro-RTSP
[env:tasmota32c6cdc-mi32]
[env:tasmota32c6-mi32]
extends = env:tasmota32_base
board = esp32c6cdc
board = esp32c6
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
@ -189,10 +200,10 @@ build_flags = ${env:tasmota32_base.build_flags}
; *** JTAG Debug versions (only C3/S3), uses inbuilt CDC/jtag. No extra jtag hardware required!
[env:tasmota32s3cdc-ocd]
[env:tasmota32s3-ocd]
build_type = debug
extends = env:tasmota32s3
board = esp32s3cdc-qio_opi
board = esp32s3-qio_opi
debug_tool = esp-builtin
upload_protocol = esp-builtin
debug_init_break = tbreak setup
@ -200,10 +211,10 @@ build_unflags = ${env:tasmota32_base.build_unflags}
build_flags = ${env:tasmota32_base.build_flags}
-DOTA_URL='""'
[env:tasmota32c3cdc-ocd]
[env:tasmota32c3-ocd]
build_type = debug
extends = env:tasmota32c3
board = esp32c3cdc
board = esp32c3
debug_tool = esp-builtin
upload_protocol = esp-builtin
debug_init_break = tbreak setup

View File

@ -44,15 +44,6 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s2cdc-safeboot]
extends = env:tasmota32_base
board = esp32s2cdc
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2cdc-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s2-safeboot]
extends = env:tasmota32_base
board = esp32s2
@ -62,6 +53,15 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s2cdc-safeboot]
extends = env:tasmota32_base
board = esp32s2cdc
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2cdc-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32c2-safeboot]
extends = env:tasmota32_base
board = esp32c2
@ -73,17 +73,6 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32c3cdc-safeboot]
extends = env:tasmota32_base
board = esp32c3cdc
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3cdc-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32c3-safeboot]
extends = env:tasmota32_base
board = esp32c3
@ -95,23 +84,23 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s3cdc-safeboot]
[env:tasmota32c3ser-safeboot]
extends = env:tasmota32_base
board = esp32s3cdc-qio_qspi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3cdc-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32c6cdc-safeboot]
extends = env:tasmota32_base
board = esp32c6cdc
board = esp32c3ser
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c6cdc-safeboot.bin"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3ser-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s3-safeboot]
extends = env:tasmota32_base
board = esp32s3-qio_qspi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
@ -126,12 +115,23 @@ build_flags = ${env:tasmota32_base.build_flags}
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s3-safeboot]
[env:tasmota32c6ser-safeboot]
extends = env:tasmota32_base
board = esp32s3-qio_qspi
board = esp32c6ser
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c6ser-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
[env:tasmota32s3ser-safeboot]
extends = env:tasmota32_base
board = esp32s3ser-qio_qspi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_SAFEBOOT
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3-safeboot.bin"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3ser-safeboot.bin"'
lib_extra_dirs = lib/lib_ssl, lib/libesp32
lib_ignore = ${safeboot_flags.lib_ignore}
@ -152,16 +152,6 @@ lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy
[env:tasmota32s2cdc]
extends = env:tasmota32_base
board = esp32s2cdc
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2cdc.bin"'
lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy
[env:tasmota32s2]
extends = env:tasmota32_base
board = esp32s2
@ -172,6 +162,16 @@ lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy
[env:tasmota32s2cdc]
extends = env:tasmota32_base
board = esp32s2cdc
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s2cdc.bin"'
lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy
[env:tasmota32c2]
extends = env:tasmota32_base
board = esp32c2
@ -181,30 +181,30 @@ build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c2.bin"'
[env:tasmota32c3cdc]
[env:tasmota32c3]
extends = env:tasmota32_base
board = esp32c3cdc
board = esp32c3
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3cdc.bin"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c3.bin"'
[env:tasmota32c6cdc]
[env:tasmota32c6]
extends = env:tasmota32_base
board = esp32c6cdc
board = esp32c6
build_unflags = ${env:tasmota32_base.build_unflags}
-mtarget-align
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c6cdc.bin"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32c6.bin"'
[env:tasmota32s3cdc]
[env:tasmota32s3]
extends = env:tasmota32_base
board = esp32s3cdc-qio_qspi
board = esp32s3-qio_qspi
build_flags = ${env:tasmota32_base.build_flags}
-DFIRMWARE_TASMOTA32
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3cdc.bin"'
-DOTA_URL='"http://ota.tasmota.com/tasmota32/release/tasmota32s3.bin"'
lib_ignore = ${env:tasmota32_base.lib_ignore}
Micro-RTSP
epdiy

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

View File

@ -0,0 +1,73 @@
# This is a simple demo of displaying Renaissance Watch adapted for 480x480 displays
#
# Just install `haspmota_watch_480.tapp` in the filesystem
#
# Generate with
# rm haspmota_watch_480.tapp ; zip -j -0 haspmota_watch_480.tapp ../haspmota_src/haspmota_watch_480/*
# Test if display is at least 480x480
lv.start()
hres = lv.get_hor_res() # should be 320
vres = lv.get_ver_res() # should be 240
if lv.get_hor_res() < 480 || lv.get_ver_res() < 480
print("Renaissance Watch 480 demo requires a screen at least 480x480")
return
end
import haspmota
haspmota.start(false, tasmota.wd + "pages.jsonl")
var prev_day = -1
def set_watch()
import global
var now = tasmota.rtc()
var time_raw = now['local']
var time = tasmota.time_dump(time_raw)
# set second
if global.contains("p23b13")
global.p23b13.angle = 60 * time['sec']
end
# set minutes
global.p100b12.angle = 60 * time['min'] + (time['sec'] / 10) * 10
# set hours
global.p100b11.angle = 300 * (time['hour'] % 12) + time['min'] * 5
# set day
if time['day'] != prev_day
global.p100b15.text = str(time['day'])
prev_day = time['day']
end
end
def run_watch()
set_watch()
tasmota.set_timer(1000, run_watch)
end
run_watch()
def watch_in()
import global
global.p0b90.hidden = true
global.p0b101.bg_opa = 0
global.p0b101.border_opa = 0
global.p0b102.bg_opa = 0
global.p0b102.border_opa = 0
global.p0b102.text_opa = 0
global.p0b103.bg_opa = 0
global.p0b103.border_opa = 0
end
def watch_out()
import global
global.p0b90.hidden = false
global.p0b101.bg_opa = 255
global.p0b101.border_opa = 255
global.p0b102.bg_opa = 255
global.p0b102.border_opa = 255
global.p0b102.text_opa = 255
global.p0b103.bg_opa = 255
global.p0b103.border_opa = 255
end
tasmota.add_rule("hasp#p100=in", watch_in)
tasmota.add_rule("hasp#p100=out", watch_out)

View File

@ -0,0 +1,29 @@
{"page":0,"comment":"---------- Upper stat line ----------"}
{"id":0,"text_color":"#FFFF44"}
{"id":90,"obj":"flex","x":0,"y":0,"w%":100,"h":24,"bg_color":"#4f4f4f","bg_opa":255,"radius":0,"border_side":1,"border_width":1,"border_color":"#FFFF44","text_color":"#FFFF44"}
{"id":91,"obj":"label","parentid":90,"x":0,"y":0,"w":100,"h%":100,"long_mode":3,"text":"Tasmota","flex_grow":1}
{"id":92,"obj":"fixed","parentid":90,"w":102,"text_color":"#FFFF44"}
{"id":95,"parentid":92,"comment":"-- Clock --","obj":"lv_clock","x":0,"y":3,"w":55,"h":16,"radius":0,"border_side":0}
{"id":96,"parentid":92,"comment":"-- Battery indicator --","obj":"label","x":57,"y":0,"w":20,"h":20,"text":"\uE6A5","align":0,"text_font":"icons-18"}
{"id":97,"parentid":92,"comment":"-- Wifi indicator --","obj":"lv_wifi_arcs","x":73,"y":0,"w":29,"h":20,"radius":0,"border_side":0,"bg_color":"#000000","line_color":"#FFFF44"}
{"comment":"---------- Bottom buttons - prev/home/next ----------"}
{"id":100,"obj":"flex","x":0,"y%":84,"h%":16,"w%":100,"flex_main_place":3}
{"id":101,"obj":"btn","parentid":100,"w%":25,"h%":100,"action":"prev","bg_color":"#4f4f4f","text_color":"#FFFF44","radius":10,"text":"\uF053","text_font":"montserrat-20","border_width":3,"border_side":15,"border_color":"#FFFF44","border_opa":210}
{"id":102,"obj":"btn","parentid":100,"w%":25,"h%":100,"action":"back","bg_color":"#4f4f4f","text_color":"#FFFF44","radius":10,"text":"\uF015","text_font":"montserrat-20","border_width":3,"border_side":15,"border_color":"#FFFF44","border_opa":210}
{"id":103,"obj":"btn","parentid":100,"w%":25,"h%":100,"action":"next","bg_color":"#4f4f4f","text_color":"#FFFF44","radius":10,"text":"\uF054","text_font":"montserrat-20","border_width":3,"border_side":15,"border_color":"#FFFF44","border_opa":210}
{"page":1,"comment":"---------- Page 1 Obj ----------"}
{"id":0,"bg_color":"#000000","text_color":"#FFFFFF"}
{"id":10,"obj":"label","x":0,"y":30,"w%":100,"h":24,"text":"Demo of Renaissance watch 480x480","text_font":"montserrat-20"}
{"page":100,"comment":"---------- Page 100 Renaissance Watch ----------"}
{"id":0,"bg_color":"#000000","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#000000"}
{"id":10,"obj":"img","src":"A:haspmota_watch_480.tapp#/ren_back_480.png","x":0,"y":0,"w":480,"h":480}
{"id":15,"obj":"label","parentid":10,"x":367,"y":225,"w":36,"h":36,"text":"29","align":"right","text_font":"montserrat-28"}
{"id":11,"obj":"img","parentid":10,"src":"A:/haspmota_watch_480.tapp#ren_hour_480.png","x":218,"y":94,"angle":-550}
{"id":12,"obj":"img","parentid":10,"src":"A:/haspmota_watch_480.tapp#ren_min_480.png","angle":500}
{"id":13,"obj":"img","parentid":10,"src":"A:/haspmota_watch_480.tapp#ren_sec_480.png","x":220,"y":20,"angle":1400,"hidden":true}

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -1,5 +1,9 @@
/********************************************************************
* Generated code, don't edit
*
* The keys in the array belox must be in lexicographic order
*
* Generated by: `python3 gpio_convert.py`
*******************************************************************/
const be_const_member_t lv_gpio_constants[] = {
@ -143,6 +147,15 @@ const be_const_member_t lv_gpio_constants[] = {
{ "LEDLNK", (int32_t) GPIO_LEDLNK },
{ "LEDLNK_INV", (int32_t) GPIO_LEDLNK_INV },
{ "LMT01", (int32_t) GPIO_LMT01 },
{ "LORA_BUSY", (int32_t) GPIO_LORA_BUSY },
{ "LORA_CS", (int32_t) GPIO_LORA_CS },
{ "LORA_DI0", (int32_t) GPIO_LORA_DI0 },
{ "LORA_DI1", (int32_t) GPIO_LORA_DI1 },
{ "LORA_DI2", (int32_t) GPIO_LORA_DI2 },
{ "LORA_DI3", (int32_t) GPIO_LORA_DI3 },
{ "LORA_DI4", (int32_t) GPIO_LORA_DI4 },
{ "LORA_DI5", (int32_t) GPIO_LORA_DI5 },
{ "LORA_RST", (int32_t) GPIO_LORA_RST },
{ "LOW", LOW },
{ "LOX_O2_RX", (int32_t) GPIO_LOX_O2_RX },
{ "MAGIC_SWITCH", (int32_t) GPIO_MAGIC_SWITCH },
@ -191,6 +204,8 @@ const be_const_member_t lv_gpio_constants[] = {
{ "OUTPUT_OPEN_DRAIN", OUTPUT_OPEN_DRAIN },
{ "P9813_CLK", (int32_t) GPIO_P9813_CLK },
{ "P9813_DAT", (int32_t) GPIO_P9813_DAT },
{ "PIPSOLAR_RX", (int32_t) GPIO_PIPSOLAR_RX },
{ "PIPSOLAR_TX", (int32_t) GPIO_PIPSOLAR_TX },
{ "PMS5003_RX", (int32_t) GPIO_PMS5003_RX },
{ "PMS5003_TX", (int32_t) GPIO_PMS5003_TX },
{ "PN532_RXD", (int32_t) GPIO_PN532_RXD },
@ -218,6 +233,9 @@ const be_const_member_t lv_gpio_constants[] = {
{ "RFSEND", (int32_t) GPIO_RFSEND },
{ "RF_SENSOR", (int32_t) GPIO_RF_SENSOR },
{ "RISING", RISING },
{ "RN2XX3_RST", (int32_t) GPIO_RN2XX3_RST },
{ "RN2XX3_RX", (int32_t) GPIO_RN2XX3_RX },
{ "RN2XX3_TX", (int32_t) GPIO_RN2XX3_TX },
{ "ROT1A", (int32_t) GPIO_ROT1A },
{ "ROT1A_NP", (int32_t) GPIO_ROT1A_NP },
{ "ROT1B", (int32_t) GPIO_ROT1B },
@ -290,6 +308,7 @@ const be_const_member_t lv_gpio_constants[] = {
{ "TASMOTACLIENT_TXD", (int32_t) GPIO_TASMOTACLIENT_TXD },
{ "TCP_RX", (int32_t) GPIO_TCP_RX },
{ "TCP_TX", (int32_t) GPIO_TCP_TX },
{ "TCP_TX_EN", (int32_t) GPIO_TCP_TX_EN },
{ "TELEINFO_ENABLE", (int32_t) GPIO_TELEINFO_ENABLE },
{ "TELEINFO_RX", (int32_t) GPIO_TELEINFO_RX },
{ "TFMINIPLUS_RX", (int32_t) GPIO_TFMINIPLUS_RX },
@ -303,6 +322,9 @@ const be_const_member_t lv_gpio_constants[] = {
{ "TM1638CLK", (int32_t) GPIO_TM1638CLK },
{ "TM1638DIO", (int32_t) GPIO_TM1638DIO },
{ "TM1638STB", (int32_t) GPIO_TM1638STB },
{ "TS_IRQ", (int32_t) GPIO_TS_IRQ },
{ "TS_RST", (int32_t) GPIO_TS_RST },
{ "TS_SPI_CS", (int32_t) GPIO_TS_SPI_CS },
{ "TUYAMCUBR_RX", (int32_t) GPIO_TUYAMCUBR_RX },
{ "TUYAMCUBR_TX", (int32_t) GPIO_TUYAMCUBR_TX },
{ "TUYA_RX", (int32_t) GPIO_TUYA_RX },
@ -334,8 +356,6 @@ const be_const_member_t lv_gpio_constants[] = {
{ "ZIGBEE_RST", (int32_t) GPIO_ZIGBEE_RST },
{ "ZIGBEE_RX", (int32_t) GPIO_ZIGBEE_RX },
{ "ZIGBEE_TX", (int32_t) GPIO_ZIGBEE_TX },
{ "PIPSOLAR_RX", (int32_t) GPIO_PIPSOLAR_RX },
{ "PIPSOLAR_TX", (int32_t) GPIO_PIPSOLAR_TX },
};

View File

@ -0,0 +1,70 @@
:H,ST7701,480,480,16,RGB,18,17,16,21,38,4,5,6,7,15,8,20,3,46,9,10,11,12,13,14,0,6
:V,1,10,8,50,1,10,8,20,0
:S,2,1,1,0,40,20
:IS,48,47,39,-1
FF,5,77,01,00,00,10
C0,2,3B,00
C1,2,0D,02
C2,2,31,05
CD,1,00
B0,10,00,11,18,0E,11,06,07,08,07,22,04,12,0F,AA,31,18
B1,10,00,11,19,0E,12,07,08,08,08,22,04,11,11,A9,32,18
FF,5,77,01,00,00,11
B0,1,60
B1,1,32
B2,1,07
B3,1,80
B5,1,49
B7,1,85
B8,1,21
C1,1,78
C2,1,78
E0,3,00,1B,02
E1,B,08,A0,00,00,07,A0,00,00,00,44,44
E2,C,11,11,44,44,ED,A0,00,00,EC,A0,00,00
E3,4,00,00,11,11
E4,2,44,44
E5,10,0A,E9,D8,A0,0C,EB,D8,A0,0E,ED,D8,A0,10,EF,D8,A0
E6,4,00,00,11,11
E7,2,44,44
E8,10,09,E8,D8,A0,0B,EA,D8,A0,0D,EC,D8,A0,0F,EE,D8,A0
EB,7,02,00,E4,E4,88,00,40
EC,2,3C,00
ED,10,AB,89,76,54,02,FF,FF,FF,FF,FF,FF,20,45,67,98,BA
FF,5,77,01,00,00,13
E5,1,E4
FF,5,77,01,00,00,00
21,0
3A,1,60
11,80
29,80
20,0
:B,120,02
:UTI,GT911,I1,5d,-1,-1
RDWM 8140 4
MV 0 1
CPR 39
RTF
MV 1 1
CPR 31
RTF
MV 2 1
CPR 31
RTF
RT
:UTT
RDW 814E
MV 0 1
AND 80
CPR 80
RTF
RDWM 8150 8
WRW 814E 00
RT
:UTX
MV 0 3
RT
:UTY
MV 2 3
RT
#

View File

@ -32,5 +32,19 @@ E1,0F,00,0E,14,03,11,07,31,C1,48,08,0F,0C,31,36,0F
:2,E8,00,00,03
:3,48,00,00,00
:i,20,21
:TI1,38,*,*
#
:UTI,FT6336U,I1,38,*,*
RD A0
CP 02
RTF
RT
:UTT
RDM 00 16
MV 2 1
RT
:UTX
MV 3 2
RT
:UTY
MV 5 2
RT
#

View File

@ -168,6 +168,11 @@
//#define USE_LUXV30B // [I2CDriver70] Enable RFRobot SEN0390 LuxV30b ambient light sensor (I2C address 0x4A) (+0k5 code)
//#define USE_PMSA003I // [I2cDriver78] Enable PMSA003I Air Quality Sensor (I2C address 0x12) (+1k8 code)
//#define USE_GDK101 // [I2cDriver79] Enable GDK101 sensor (I2C addresses 0x18 - 0x1B) (+1k2 code)
//#define USE_TC74 // [I2cDriver80] Enable TC74 sensor (I2C addresses 0x48 - 0x4F) (+1k code)
//#define USE_PCA9557 // [I2cDriver81] Enable PCA9557 8-bit I/O Expander (I2C addresses 0x18 - 0x1F) (+2k5 code)
//#define USE_MAX17043 // [I2cDriver83] Enable MAX17043 fuel-gauge systems Lipo batteries sensor (I2C address 0x36) (+0k9 code)
//#define USE_AMSX915 // [I2CDriver86] Enable AMS5915/AMS6915 pressure/temperature sensor (+1k2 code)
//#define USE_SPL06_007 // [I2cDriver87] Enable SPL06_007 pressure and temperature sensor (I2C addresses 0x76) (+2k5 code)
//#define USE_RTC_CHIPS // Enable RTC chip support and NTP server - Select only one
// #define USE_DS3231 // [I2cDriver26] Enable DS3231 RTC (I2C address 0x68) (+1k2 code)

View File

@ -58,7 +58,7 @@
#undef USE_HOME_ASSISTANT // Disable Home Assistant
#undef USE_TASMOTA_DISCOVERY // Disable Tasmota Discovery support (+2k code)
#undef USE_TELEGRAM // Disable support for Telegram protocol (+49k code, +7.0k mem and +4.8k additional during connection handshake)
#undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set
//#undef USE_MQTT_TLS // Disable TLS support won't work as the MQTTHost is not set
#undef USE_KNX // Disable KNX IP Protocol Support
//#undef USE_WEBSERVER // Disable Webserver
#undef USE_GPIO_VIEWER // Enable GPIO Viewer to see realtime GPIO states (+5k6 code)
@ -189,6 +189,7 @@
#if CONFIG_IDF_TARGET_ESP32
#if CONFIG_FREERTOS_UNICORE
#undef USE_MQTT_TLS
#define USE_SERIAL_BRIDGE // Add support for software Serial Bridge console Tee (+2k code)
#define USE_ETHERNET
#endif // CONFIG_FREERTOS_UNICORE

View File

@ -219,6 +219,7 @@ enum UserSelectablePins {
GPIO_LORA_CS, GPIO_LORA_RST, GPIO_LORA_BUSY, GPIO_LORA_DI0, GPIO_LORA_DI1, GPIO_LORA_DI2, GPIO_LORA_DI3, GPIO_LORA_DI4, GPIO_LORA_DI5, // LoRa SPI
GPIO_TS_SPI_CS, GPIO_TS_RST, GPIO_TS_IRQ, // SPI for Universal Touch Screen
GPIO_RN2XX3_TX, GPIO_RN2XX3_RX, GPIO_RN2XX3_RST, // RN2XX3 LoRaWan node Serial interface
GPIO_TCP_TX_EN, // TCP to serial bridge, EN pin
GPIO_SENSOR_END };
// Error as warning to rethink GPIO usage with max 2045
@ -485,6 +486,7 @@ const char kSensorNames[] PROGMEM =
D_GPIO_LORA_CS "|" D_GPIO_LORA_RST "|" D_GPIO_LORA_BUSY "|" D_GPIO_LORA_DI "0|" D_GPIO_LORA_DI "1|" D_GPIO_LORA_DI "2|" D_GPIO_LORA_DI "3|" D_GPIO_LORA_DI "4|" D_GPIO_LORA_DI "5|"
D_GPIO_TS_SPI_CS "|" D_GPIO_TS_RST "|" D_GPIO_TS_IRQ "|"
D_GPIO_RN2XX3_TX "|" D_GPIO_RN2XX3_RX "|" D_GPIO_RN2XX3_RST "|"
D_SENSOR_TCP_TXD_EN "|"
;
const char kSensorNamesFixed[] PROGMEM =
@ -983,6 +985,7 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#ifdef USE_TCP_BRIDGE
AGPIO(GPIO_TCP_TX), // TCP Serial bridge
AGPIO(GPIO_TCP_RX), // TCP Serial bridge
AGPIO(GPIO_TCP_TX_EN), // TCP Serial bridge EN
#endif
#ifdef USE_ZIGBEE
AGPIO(GPIO_ZIGBEE_TX), // Zigbee Serial interface

View File

@ -22,6 +22,6 @@
#define TASMOTA_SHA_SHORT // Filled by Github sed
const uint32_t TASMOTA_VERSION = 0x0D040101; // 13.4.1.1
const uint32_t TASMOTA_VERSION = 0x0D040102; // 13.4.1.2
#endif // _TASMOTA_VERSION_H_

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 Tx"
#define D_SENSOR_IEM3000_RX "iEM3000 Rx"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -28,7 +28,7 @@
* Use online command StateText to translate ON, OFF, HOLD and TOGGLE.
* Use online command Prefix to translate cmnd, stat and tele.
*
* Updated until v9.4.0.1 - Last update 27.03.2024
* Updated until v9.4.0.1 - Last update 26.04.2024
\*********************************************************************/
#define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English)
@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH - MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH - MDIO"
#define D_SENSOR_TCP_TXD "TCP - TX"
#define D_SENSOR_TCP_TXD_EN "TCP - TX En"
#define D_SENSOR_TCP_RXD "TCP - RX"
#define D_SENSOR_IEM3000_TX "iEM3000 - TX"
#define D_SENSOR_IEM3000_RX "iEM3000 - RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -909,6 +909,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -908,6 +908,7 @@
#define D_SENSOR_ETH_PHY_MDC "ETH MDC"
#define D_SENSOR_ETH_PHY_MDIO "ETH MDIO"
#define D_SENSOR_TCP_TXD "TCP Tx"
#define D_SENSOR_TCP_TXD_EN "TCP Tx En"
#define D_SENSOR_TCP_RXD "TCP Rx"
#define D_SENSOR_IEM3000_TX "iEM3000 TX"
#define D_SENSOR_IEM3000_RX "iEM3000 RX"

View File

@ -290,7 +290,7 @@
*Used by image decoders such as `lv_lodepng` to keep the decoded image in the memory.
*If size is not set to 0, the decoder will fail to decode when the cache is full.
*If size is 0, the cache function is not enabled and the decoded mem will be released immediately after use.*/
#define LV_IMG_CACHE_DEF_SIZE_PSRAM (1024*1024)
#define LV_IMG_CACHE_DEF_SIZE_PSRAM (2048*1024)
#define LV_IMG_CACHE_DEF_SIZE_NOPSRAM (32*1024)
#define LV_CACHE_DEF_SIZE 1024 // TASMOTA very low value as a place-holder, the true value is adjusted later
@ -784,7 +784,7 @@
#define LV_USE_RLOTTIE 0
/*Enable Vector Graphic APIs*/
#define LV_USE_VECTOR_GRAPHIC 1 // TASMOTA
#define LV_USE_VECTOR_GRAPHIC 0
/* Enable ThorVG (vector graphics library) from the src/libs folder */
#define LV_USE_THORVG_INTERNAL 0

View File

@ -750,6 +750,7 @@ https://rya.nc/tasmota-fingerprint.html"
// #define USE_MAX17043 // [I2cDriver83] Enable MAX17043 fuel-gauge systems Lipo batteries sensor (I2C address 0x36) (+0k9 code)
// #define MAX17043_ALERT_THRESHOLD 32 // [I2cDriver83] Define the alert threshold for low battery level percentage 1-32
// #define USE_AMSX915 // [I2CDriver86] Enable AMS5915/AMS6915 pressure/temperature sensor (+1k2 code)
// #define USE_SPL06_007 // [I2cDriver87] Enable SPL06_007 pressure and temperature sensor (I2C addresses 0x76) (+2k5 code)
// #define USE_RTC_CHIPS // Enable RTC chip support and NTP server - Select only one
// #define USE_DS3231 // [I2cDriver26] Enable DS3231 RTC (I2C address 0x68) (+1k2 code)
@ -1235,7 +1236,7 @@ https://rya.nc/tasmota-fingerprint.html"
#define BE_LV_WIDGET_IMAGEBUTTON // LVGL 9
// #define BE_LV_WIDGET_KEYBOARD
#define BE_LV_WIDGET_LED
// #define BE_LV_WIDGET_LIST
#define BE_LV_WIDGET_LIST
#define BE_LV_WIDGET_METER
#define BE_LV_WIDGET_MSGBOX
#define BE_LV_WIDGET_QRCODE
@ -1362,4 +1363,17 @@ https://rya.nc/tasmota-fingerprint.html"
#endif
#endif // USE_LVGL && USE_LVGL_FREETYPE
/*********************************************************************************************\
* Post-process I2S
\*********************************************************************************************/
#if defined(USE_I2S_ALL)
#define USE_I2S
#define USE_I2S_AUDIO
#define USE_I2S_MIC
#define USE_SHINE
#define MP3_MIC_STREAM
#define USE_I2S_AUDIO_BERRY
#endif // USE_I2S_ALL
#endif // _MY_USER_CONFIG_H_

View File

@ -135,8 +135,6 @@ struct WIFI {
bool wifi_test_AP_TIMEOUT = false;
bool wifi_Test_Restart = false;
bool wifi_Test_Save_SSID2 = false;
// IPv6 support, not guarded with #if LWIP_IPV6 to avoid bloating code with ifdefs
bool ipv6_local_link_called = false; // did we already enable IPv6 Local-Link address, needs to be redone at each reconnect
} Wifi;
typedef struct {

View File

@ -208,7 +208,7 @@ void CmndWifiTest(void)
AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CONNECTING_TO_AP " %s " D_AS " %s ..."),
ssid_test, TasmotaGlobal.hostname);
WiFi.begin(ssid_test,pswd_test);
WiFiHelper::begin(ssid_test,pswd_test);
}
} else {
ResponseCmndChar(D_JSON_BUSY);

View File

@ -40,27 +40,23 @@ const static char kWifiPhyMode[] PROGMEM = "low rate|11b|11g|HT20|HT40|HE20"; //
#endif
// See libraries\ESP32\examples\ResetReason.ino
#if ESP_IDF_VERSION_MAJOR > 3 // IDF 4+
#include "esp_chip_info.h"
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
#include "esp32/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32S2 // ESP32-S2
#include "esp32s2/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32S3 // ESP32-S3
#include "esp32s3/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C2 // ESP32-C2
#include "esp32c2/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C3 // ESP32-C3
#include "esp32c3/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C6 // ESP32-C6
#include "esp32c6/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
#include "esp32h2/rom/rtc.h"
#else
#error Target CONFIG_IDF_TARGET is not supported
#endif
#else // ESP32 Before IDF 4.0
#include "rom/rtc.h"
#include "esp_chip_info.h"
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
#include "esp32/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32S2 // ESP32-S2
#include "esp32s2/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32S3 // ESP32-S3
#include "esp32s3/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C2 // ESP32-C2
#include "esp32c2/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C3 // ESP32-C3
#include "esp32c3/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32C6 // ESP32-C6
#include "esp32c6/rom/rtc.h"
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
#include "esp32h2/rom/rtc.h"
#else
#error Target CONFIG_IDF_TARGET is not supported
#endif
// Set the Stacksize for Arduino core. Default is 8192, some builds may need a bigger one
@ -204,12 +200,7 @@ void NvsInfo(void) {
// See Esp.cpp
#include "Esp.h"
#if ESP_IDF_VERSION_MAJOR >= 5
// esp_spi_flash.h is deprecated, please use spi_flash_mmap.h instead
#include "spi_flash_mmap.h"
#else
#include "esp_spi_flash.h"
#endif
#include "spi_flash_mmap.h"
#include <memory>
#include <soc/soc.h>
#include <soc/efuse_reg.h>
@ -220,39 +211,34 @@ extern "C" {
}
#include "esp_system.h"
#include "esp_flash.h"
#if ESP_IDF_VERSION_MAJOR > 3 // IDF 4+
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
#include "esp32/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x1000 // Flash offset containing magic flash size and spi mode
#elif CONFIG_IDF_TARGET_ESP32S2 // ESP32-S2
#include "esp32s2/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x1000 // Flash offset containing magic flash size and spi mode
#elif CONFIG_IDF_TARGET_ESP32S3 // ESP32-S3
#include "esp32s3/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32s3 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32C2 // ESP32-C2
#include "esp32c2/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32c2 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32C3 // ESP32-C3
#include "esp32c3/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32c3 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32C6 // ESP32-C6
#include "esp32c6/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32c6 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
#include "esp32h2/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32h2 is located at 0x0000
#else
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
#include "esp32/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x1000 // Flash offset containing magic flash size and spi mode
#elif CONFIG_IDF_TARGET_ESP32S2 // ESP32-S2
#include "esp32s2/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x1000 // Flash offset containing magic flash size and spi mode
#elif CONFIG_IDF_TARGET_ESP32S3 // ESP32-S3
#include "esp32s3/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32s3 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32C2 // ESP32-C2
#include "esp32c2/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32c2 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32C3 // ESP32-C3
#include "esp32c3/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32c3 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32C6 // ESP32-C6
#include "esp32c6/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32c6 is located at 0x0000
#elif CONFIG_IDF_TARGET_ESP32H2 // ESP32-H2
#include "esp32h2/rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x0000 // Esp32h2 is located at 0x0000
#else
#error Target CONFIG_IDF_TARGET is not supported
#endif
#else // ESP32 Before IDF 4.0
#include "rom/spi_flash.h"
#define ESP_FLASH_IMAGE_BASE 0x1000
#endif
#if ESP_IDF_VERSION_MAJOR >= 5
#include "bootloader_common.h"
#endif
#include "bootloader_common.h"
uint32_t EspProgramSize(const char *label) {
const esp_partition_t *part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, label);
if (!part) {
@ -462,7 +448,7 @@ uint32_t ESP_getFlashChipMagicSize(void) {
}
uint32_t ESP_magicFlashChipSize(uint8_t spi_size) {
/*
/*
switch(spi_size & 0x0F) {
case 0x0: // 8 MBit (1MB)
return 1048576;
@ -477,7 +463,7 @@ uint32_t ESP_magicFlashChipSize(uint8_t spi_size) {
case 0x5: // 256 MBit (32MB)
return 33554432;
default: // fail so return (1KB)
return 1024;
return 1024;
}
*/
// When spi_size is bigger than 11 will return 0 (0x100000000 = 0x00000000)
@ -590,14 +576,10 @@ extern "C" {
// `psramFound()` can return true even if no PSRAM is actually installed
// This new version also checks `esp_spiram_is_initialized` to know if the PSRAM is initialized
bool FoundPSRAM(void) {
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || DISABLE_PSRAMCHECK
return psramFound();
#else
#if ESP_IDF_VERSION_MAJOR >= 5
return psramFound() && esp_psram_is_initialized();
#else
return psramFound() && esp_spiram_is_initialized();
#endif
return psramFound() && esp_psram_is_initialized();
#endif
}
@ -774,9 +756,6 @@ typedef struct {
- Peripherals include capacitive touch sensors, Hall sensor, SD card interface, Ethernet, high-speed SPI, UART, I2S and I2C
*/
#ifdef CONFIG_IDF_TARGET_ESP32
#if (ESP_IDF_VERSION_MAJOR < 5)
pkg_version = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_PKG) & 0x7;
#endif
// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("HDW: ESP32 Model %d, Revision %d, Core %d"), chip_info.model, chip_revision, chip_info.cores);
@ -816,9 +795,6 @@ typedef struct {
- Availability of common cloud connectivity agents and common product features shortens the time to market
*/
#ifdef CONFIG_IDF_TARGET_ESP32S2
#if (ESP_IDF_VERSION_MAJOR < 5)
pkg_version = REG_GET_FIELD(EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_FLASH_VERSION) & 0xF;
#endif
uint32_t psram_ver = REG_GET_FIELD(EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PSRAM_VERSION);
pkg_version += ((psram_ver & 0xF) * 100);
@ -846,9 +822,6 @@ typedef struct {
- Rich set of peripheral interfaces and GPIOs, ideal for various scenarios and complex applications
*/
#ifdef CONFIG_IDF_TARGET_ESP32C3
#if (ESP_IDF_VERSION_MAJOR < 5)
pkg_version = REG_GET_FIELD(EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PKG_VERSION) & 0x7;
#endif
switch (pkg_version) {
case 0: return F("ESP32-C3"); // Max 160MHz, Single core, QFN 5*5, ESP32-C3-WROOM-02, ESP32-C3-DevKitC-02
// case 1: return F("ESP32-C3FH4"); // Max 160MHz, Single core, QFN 5*5, 4MB embedded flash, ESP32-C3-MINI-1, ESP32-C3-DevKitM-1
@ -872,12 +845,10 @@ typedef struct {
- Reliable security features ensured by RSA-based secure boot, AES-XTS-based flash encryption, the innovative digital signature and the HMAC peripheral, World Controller
*/
#ifdef CONFIG_IDF_TARGET_ESP32S3
#if (ESP_IDF_VERSION_MAJOR >= 5)
switch (pkg_version) {
case 0: return F("ESP32-S3"); // QFN56
case 1: return F("ESP32-S3-PICO-1"); // LGA56
}
#endif
#endif // CONFIG_IDF_TARGET_ESP32S3
return F("ESP32-S3"); // Max 240MHz, Dual core, QFN 7*7, ESP32-S3-WROOM-1, ESP32-S3-DevKitC-1
}
@ -989,29 +960,13 @@ String WifiGetPhyMode(void) {
* Thanks to DigitalAlchemist
\*********************************************************************************************/
#if ESP_IDF_VERSION_MAJOR >= 5
#include <esp_random.h>
#endif
// Based on code from https://raw.githubusercontent.com/espressif/esp-idf/master/components/esp32/hw_random.c
uint32_t HwRandom(void) {
#if ESP_IDF_VERSION_MAJOR >= 5
// See for more info on the HW RNG:
// https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/system/random.html
return esp_random();
#else
#define _RAND_ADDR 0x3FF75144UL
static uint32_t last_ccount = 0;
uint32_t ccount;
uint32_t result = 0;
do {
ccount = ESP.getCycleCount();
result ^= *(volatile uint32_t *)_RAND_ADDR;
} while (ccount - last_ccount < 64);
last_ccount = ccount;
return result ^ *(volatile uint32_t *)_RAND_ADDR;
#undef _RAND_ADDR
#endif // ESP_IDF_VERSION_MAJOR >= 5
}
/********************************************************************************************/

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