diff --git a/Buildscripts/CDN/generate-firmware-files.py b/Buildscripts/CDN/generate-firmware-files.py
index 23fd6126e..c3f99483c 100644
--- a/Buildscripts/CDN/generate-firmware-files.py
+++ b/Buildscripts/CDN/generate-firmware-files.py
@@ -2,11 +2,9 @@
from datetime import datetime, UTC
import os
import sys
-import configparser
from dataclasses import dataclass, asdict
import json
import shutil
-from configparser import RawConfigParser
VERBOSE = False
DEVICES_FOLDER = "Devices"
@@ -68,32 +66,29 @@ def exit_with_error(message):
sys.exit(1)
def read_properties_file(path):
- config = configparser.RawConfigParser()
- # Don't convert keys to lowercase
- config.optionxform = str
- config.read(path)
- return config
-
-def get_property_or_none(properties: RawConfigParser, group: str, key: str):
- if group not in properties.sections():
- return None
- if key not in properties[group].keys():
- return None
- return properties[group][key]
-
-def get_boolean_property_or_false(properties: RawConfigParser, group: str, key: str):
- if group not in properties.sections():
- return False
- if key not in properties[group].keys():
- return False
- return properties[group][key] == "true"
-
-def get_property_or_exit(properties: RawConfigParser, group: str, key: str):
- if group not in properties.sections():
- exit_with_error(f"Device properties does not contain group: {group}")
- if key not in properties[group].keys():
- exit_with_error(f"Device properties does not contain key: {key}")
- return properties[group][key]
+ properties = {}
+ with open(path, "r") as file:
+ for line in file:
+ stripped = line.strip()
+ if not stripped or stripped.startswith("#"):
+ continue
+ key, sep, value = line.partition("=")
+ if not sep:
+ continue
+ properties[key.strip()] = value.strip()
+ return properties
+
+def get_property_or_none(properties: dict, group: str, key: str):
+ return properties.get(f"{group}.{key}")
+
+def get_boolean_property_or_false(properties: dict, group: str, key: str):
+ return properties.get(f"{group}.{key}") == "true"
+
+def get_property_or_exit(properties: dict, group: str, key: str):
+ full_key = f"{group}.{key}"
+ if full_key not in properties:
+ exit_with_error(f"Device properties does not contain key: {full_key}")
+ return properties[full_key]
def read_device_properties(device_id):
mapping_file_path = os.path.join(DEVICES_FOLDER, device_id, "device.properties")
@@ -129,7 +124,7 @@ def to_manifest_chip_name(name):
return ""
-def process_device(in_path: str, out_path: str, device_directory: str, device_id: str, device_properties: RawConfigParser, version: str):
+def process_device(in_path: str, out_path: str, device_directory: str, device_id: str, device_properties: dict, version: str):
in_device_path = os.path.join(in_path, device_directory)
in_device_binaries_path = os.path.join(in_device_path, "Binaries")
if not os.path.isdir(in_device_binaries_path):
diff --git a/Buildscripts/properties.cmake b/Buildscripts/properties.cmake
index e25beaa58..ed7eea059 100644
--- a/Buildscripts/properties.cmake
+++ b/Buildscripts/properties.cmake
@@ -28,7 +28,6 @@ function(READ_PROPERTIES_TO_MAP PROPERTY_FILE RESULT_VAR)
endif ()
file(STRINGS ${PROPERTY_FILE_ABS} lines)
- set(current_section "")
set(map_content "")
foreach(line IN LISTS lines)
@@ -37,9 +36,7 @@ function(READ_PROPERTIES_TO_MAP PROPERTY_FILE RESULT_VAR)
continue()
endif ()
- if (line MATCHES "^\\[.*\\]$")
- set(current_section "${line}")
- elseif (line MATCHES "^([^=]+)=(.*)$")
+ if (line MATCHES "^([^=]+)=(.*)$")
set(key "${CMAKE_MATCH_1}")
set(value "${CMAKE_MATCH_2}")
string(STRIP "${key}" key)
@@ -49,7 +46,7 @@ function(READ_PROPERTIES_TO_MAP PROPERTY_FILE RESULT_VAR)
set(value "${CMAKE_MATCH_1}")
endif ()
- list(APPEND map_content "${current_section}${key}" "${value}")
+ list(APPEND map_content "${key}" "${value}")
endif ()
endforeach()
diff --git a/Devices/btt-panda-touch/device.properties b/Devices/btt-panda-touch/device.properties
index e6d97c7fb..b34ee6e4b 100644
--- a/Devices/btt-panda-touch/device.properties
+++ b/Devices/btt-panda-touch/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=BigTreeTech
-name=Panda Touch,K Touch
+general.vendor=BigTreeTech
+general.name=Panda Touch,K Touch
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-esptoolFlashFreq=120M
-bluetooth=true
-usbHostEnabled=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
+hardware.usbHostEnabled=true
-[display]
-size=5"
-shape=rectangle
-dpi=187
+display.size=5"
+display.shape=rectangle
+display.dpi=187
-[lvgl]
-colorDepth=16
-fontSize=18
+lvgl.colorDepth=16
+lvgl.fontSize=18
diff --git a/Devices/cyd-2432s024c/device.properties b/Devices/cyd-2432s024c/device.properties
index c008356a5..8c41c3e86 100644
--- a/Devices/cyd-2432s024c/device.properties
+++ b/Devices/cyd-2432s024c/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=CYD
-name=2432S024C
+general.vendor=CYD
+general.name=2432S024C
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.4"
-shape=rectangle
-dpi=167
+display.size=2.4"
+display.shape=rectangle
+display.dpi=167
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-2432s024r/device.properties b/Devices/cyd-2432s024r/device.properties
index da517175a..b54d29d5f 100644
--- a/Devices/cyd-2432s024r/device.properties
+++ b/Devices/cyd-2432s024r/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=CYD
-name=2432S024R
+general.vendor=CYD
+general.name=2432S024R
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.4"
-shape=rectangle
-dpi=167
+display.size=2.4"
+display.shape=rectangle
+display.dpi=167
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-2432s028r/device.properties b/Devices/cyd-2432s028r/device.properties
index 99a9e2048..ff1db8b35 100644
--- a/Devices/cyd-2432s028r/device.properties
+++ b/Devices/cyd-2432s028r/device.properties
@@ -1,22 +1,16 @@
-[general]
-vendor=CYD
-name=2432S028R
+general.vendor=CYD
+general.name=2432S028R
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[cdn]
-warningMessage=There are 3 hardware variants of this board. This build works on the original variant only ("v1").
+cdn.warningMessage=There are 3 hardware variants of this board. This build works on the original variant only ("v1").
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-2432s028rv3/device.properties b/Devices/cyd-2432s028rv3/device.properties
index 3cfd1da48..c35b6414e 100644
--- a/Devices/cyd-2432s028rv3/device.properties
+++ b/Devices/cyd-2432s028rv3/device.properties
@@ -1,22 +1,16 @@
-[general]
-vendor=CYD
-name=2432S028R v3
+general.vendor=CYD
+general.name=2432S028R v3
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[cdn]
-warningMessage=There are 3 hardware variants of this board. This build only supports board version 3.
+cdn.warningMessage=There are 3 hardware variants of this board. This build only supports board version 3.
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-2432s032c/device.properties b/Devices/cyd-2432s032c/device.properties
index 7ebae0ac6..239afa35b 100644
--- a/Devices/cyd-2432s032c/device.properties
+++ b/Devices/cyd-2432s032c/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=CYD
-name=2432S032C
+general.vendor=CYD
+general.name=2432S032C
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=3.2"
-shape=rectangle
-dpi=125
+display.size=3.2"
+display.shape=rectangle
+display.dpi=125
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-3248s035c/device.properties b/Devices/cyd-3248s035c/device.properties
index 920c71edd..fedfa096f 100644
--- a/Devices/cyd-3248s035c/device.properties
+++ b/Devices/cyd-3248s035c/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=CYD
-name=3248S035C
-
-[apps]
-launcherAppId=Launcher
-
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
-
-[display]
-size=3.5"
-shape=rectangle
-dpi=165
-
-[lvgl]
-colorDepth=16
+general.vendor=CYD
+general.name=3248S035C
+
+apps.launcherAppId=Launcher
+
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
+
+display.size=3.5"
+display.shape=rectangle
+display.dpi=165
+
+lvgl.colorDepth=16
diff --git a/Devices/cyd-4848s040c/device.properties b/Devices/cyd-4848s040c/device.properties
index 1520827d1..6dc012050 100644
--- a/Devices/cyd-4848s040c/device.properties
+++ b/Devices/cyd-4848s040c/device.properties
@@ -1,22 +1,17 @@
-[general]
-vendor=CYD
-name=4848S040C
+general.vendor=CYD
+general.name=4848S040C
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=80M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=80M
+hardware.bluetooth=true
-[display]
-size=4"
-shape=rectangle
-dpi=170
+display.size=4"
+display.shape=rectangle
+display.dpi=170
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-8048s043c/device.properties b/Devices/cyd-8048s043c/device.properties
index 54d406cf3..94659babd 100644
--- a/Devices/cyd-8048s043c/device.properties
+++ b/Devices/cyd-8048s043c/device.properties
@@ -1,30 +1,24 @@
-[general]
-vendor=CYD
-name=8048S043C
-incubating=false
+general.vendor=CYD
+general.name=8048S043C
+general.incubating=false
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=80M
-esptoolFlashFreq=80M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=80M
+hardware.esptoolFlashFreq=80M
+hardware.bluetooth=true
-[display]
-size=4.3"
-shape=rectangle
-dpi=217
+display.size=4.3"
+display.shape=rectangle
+display.dpi=217
-[cdn]
-infoMessage=
-warningMessage=
+cdn.infoMessage=
+cdn.warningMessage=
-[lvgl]
-theme=DefaultDark
-colorDepth=16
-fontSize=18
+lvgl.theme=DefaultDark
+lvgl.colorDepth=16
+lvgl.fontSize=18
diff --git a/Devices/cyd-e32r28t/device.properties b/Devices/cyd-e32r28t/device.properties
index 779ca631b..f9b582a91 100644
--- a/Devices/cyd-e32r28t/device.properties
+++ b/Devices/cyd-e32r28t/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=CYD
-name=E32R28T
+general.vendor=CYD
+general.name=E32R28T
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/cyd-e32r32p/device.properties b/Devices/cyd-e32r32p/device.properties
index c2e681238..1895aa401 100644
--- a/Devices/cyd-e32r32p/device.properties
+++ b/Devices/cyd-e32r32p/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=CYD
-name=E32R32P
+general.vendor=CYD
+general.name=E32R32P
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.8"
-shape=rectangle
-dpi=125
+display.size=2.8"
+display.shape=rectangle
+display.dpi=125
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/elecrow-crowpanel-advance-28/device.properties b/Devices/elecrow-crowpanel-advance-28/device.properties
index fad2d476b..797e53f9c 100644
--- a/Devices/elecrow-crowpanel-advance-28/device.properties
+++ b/Devices/elecrow-crowpanel-advance-28/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=Elecrow
-name=CrowPanel Advance 2.8"
+general.vendor=Elecrow
+general.name=CrowPanel Advance 2.8"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/elecrow-crowpanel-advance-35/device.properties b/Devices/elecrow-crowpanel-advance-35/device.properties
index 5ce9900a3..0bc352e62 100644
--- a/Devices/elecrow-crowpanel-advance-35/device.properties
+++ b/Devices/elecrow-crowpanel-advance-35/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=Elecrow
-name=CrowPanel Advance 3.5"
+general.vendor=Elecrow
+general.name=CrowPanel Advance 3.5"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=3.5"
-shape=rectangle
-dpi=165
+display.size=3.5"
+display.shape=rectangle
+display.dpi=165
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/elecrow-crowpanel-advance-50/device.properties b/Devices/elecrow-crowpanel-advance-50/device.properties
index ddf3b78ea..f1a00e282 100644
--- a/Devices/elecrow-crowpanel-advance-50/device.properties
+++ b/Devices/elecrow-crowpanel-advance-50/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=Elecrow
-name=CrowPanel Advance 5.0"
+general.vendor=Elecrow
+general.name=CrowPanel Advance 5.0"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=5"
-shape=rectangle
-dpi=187
+display.size=5"
+display.shape=rectangle
+display.dpi=187
-[lvgl]
-colorDepth=16
-fontSize=18
+lvgl.colorDepth=16
+lvgl.fontSize=18
diff --git a/Devices/elecrow-crowpanel-basic-28/device.properties b/Devices/elecrow-crowpanel-basic-28/device.properties
index f347cfb64..7843d8298 100644
--- a/Devices/elecrow-crowpanel-basic-28/device.properties
+++ b/Devices/elecrow-crowpanel-basic-28/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=Elecrow
-name=CrowPanel Basic 2.8"
+general.vendor=Elecrow
+general.name=CrowPanel Basic 2.8"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/elecrow-crowpanel-basic-35/device.properties b/Devices/elecrow-crowpanel-basic-35/device.properties
index 8d6847985..b768e1574 100644
--- a/Devices/elecrow-crowpanel-basic-35/device.properties
+++ b/Devices/elecrow-crowpanel-basic-35/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=Elecrow
-name=CrowPanel Basic 3.5"
+general.vendor=Elecrow
+general.name=CrowPanel Basic 3.5"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=3.5"
-shape=rectangle
-dpi=165
+display.size=3.5"
+display.shape=rectangle
+display.dpi=165
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/elecrow-crowpanel-basic-50/device.properties b/Devices/elecrow-crowpanel-basic-50/device.properties
index 529b1067b..5f71e02e4 100644
--- a/Devices/elecrow-crowpanel-basic-50/device.properties
+++ b/Devices/elecrow-crowpanel-basic-50/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=Elecrow
-name=CrowPanel Basic 5.0"
+general.vendor=Elecrow
+general.name=CrowPanel Basic 5.0"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=4MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=4MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=5.0"
-shape=rectangle
-dpi=187
+display.size=5.0"
+display.shape=rectangle
+display.dpi=187
-[lvgl]
-colorDepth=16
-fontSize=18
+lvgl.colorDepth=16
+lvgl.fontSize=18
diff --git a/Devices/generic-esp32/device.properties b/Devices/generic-esp32/device.properties
index e41522028..4dd70ea65 100644
--- a/Devices/generic-esp32/device.properties
+++ b/Devices/generic-esp32/device.properties
@@ -1,12 +1,9 @@
-[general]
-vendor=Generic
-name=ESP32
+general.vendor=Generic
+general.name=ESP32
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
diff --git a/Devices/generic-esp32c6/device.properties b/Devices/generic-esp32c6/device.properties
index 9155ce6dd..c8941ee30 100644
--- a/Devices/generic-esp32c6/device.properties
+++ b/Devices/generic-esp32c6/device.properties
@@ -1,12 +1,9 @@
-[general]
-vendor=Generic
-name=ESP32-C6
+general.vendor=Generic
+general.name=ESP32-C6
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32C6
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32C6
+hardware.flashSize=4MB
+hardware.spiRam=false
diff --git a/Devices/generic-esp32p4/device.properties b/Devices/generic-esp32p4/device.properties
index d417ef90d..d2fefc160 100644
--- a/Devices/generic-esp32p4/device.properties
+++ b/Devices/generic-esp32p4/device.properties
@@ -1,12 +1,9 @@
-[general]
-vendor=Generic
-name=ESP32-P4
+general.vendor=Generic
+general.name=ESP32-P4
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32P4
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32P4
+hardware.flashSize=4MB
+hardware.spiRam=false
diff --git a/Devices/generic-esp32s3/device.properties b/Devices/generic-esp32s3/device.properties
index e5a2ab829..3bb4a9d42 100644
--- a/Devices/generic-esp32s3/device.properties
+++ b/Devices/generic-esp32s3/device.properties
@@ -1,12 +1,9 @@
-[general]
-vendor=Generic
-name=ESP32-S3
+general.vendor=Generic
+general.name=ESP32-S3
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32S3
+hardware.flashSize=4MB
+hardware.spiRam=false
diff --git a/Devices/guition-jc1060p470ciwy/device.properties b/Devices/guition-jc1060p470ciwy/device.properties
index 418658815..4ad803c6a 100644
--- a/Devices/guition-jc1060p470ciwy/device.properties
+++ b/Devices/guition-jc1060p470ciwy/device.properties
@@ -1,33 +1,27 @@
-[general]
-vendor=Guition
-name=JC1060P470C-I-W-Y
+general.vendor=Guition
+general.name=JC1060P470C-I-W-Y
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32P4
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=200M
-esptoolFlashFreq=80M
-bluetooth=true
+hardware.target=ESP32P4
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=200M
+hardware.esptoolFlashFreq=80M
+hardware.bluetooth=true
-[display]
-size=7"
-shape=rectangle
-dpi=187
+display.size=7"
+display.shape=rectangle
+display.dpi=187
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
-[sdkconfig]
-CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
-CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
-CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
-CONFIG_ESP_HOSTED_ENABLED=y
-CONFIG_ESP_HOSTED_P4_DEV_BOARD_FUNC_BOARD=y
-CONFIG_ESP_HOSTED_SDIO_HOST_INTERFACE=y
-CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
-CONFIG_ESP_HOSTED_USE_MEMPOOL=n
+sdkconfig.CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
+sdkconfig.CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
+sdkconfig.CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
+sdkconfig.CONFIG_ESP_HOSTED_ENABLED=y
+sdkconfig.CONFIG_ESP_HOSTED_P4_DEV_BOARD_FUNC_BOARD=y
+sdkconfig.CONFIG_ESP_HOSTED_SDIO_HOST_INTERFACE=y
+sdkconfig.CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
+sdkconfig.CONFIG_ESP_HOSTED_USE_MEMPOOL=n
diff --git a/Devices/guition-jc2432w328c/device.properties b/Devices/guition-jc2432w328c/device.properties
index 9f7be588e..a938ef23a 100644
--- a/Devices/guition-jc2432w328c/device.properties
+++ b/Devices/guition-jc2432w328c/device.properties
@@ -1,19 +1,14 @@
-[general]
-vendor=Guition
-name=JC2432W328C
+general.vendor=Guition
+general.name=JC2432W328C
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/guition-jc3248w535c/device.properties b/Devices/guition-jc3248w535c/device.properties
index c1f3a08ae..dabe1b878 100644
--- a/Devices/guition-jc3248w535c/device.properties
+++ b/Devices/guition-jc3248w535c/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=Guition
-name=JC3248W535C
+general.vendor=Guition
+general.name=JC3248W535C
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=3.5"
-shape=rectangle
-dpi=165
+display.size=3.5"
+display.shape=rectangle
+display.dpi=165
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/guition-jc8048w550c/device.properties b/Devices/guition-jc8048w550c/device.properties
index 0dda312f1..46c912bdd 100644
--- a/Devices/guition-jc8048w550c/device.properties
+++ b/Devices/guition-jc8048w550c/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=Guition
-name=JC8048W550C
+general.vendor=Guition
+general.name=JC8048W550C
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=80M
-esptoolFlashFreq=80M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=80M
+hardware.esptoolFlashFreq=80M
+hardware.bluetooth=true
-[display]
-size=5"
-shape=rectangle
-dpi=187
+display.size=5"
+display.shape=rectangle
+display.dpi=187
-[lvgl]
-colorDepth=16
-fontSize=18
+lvgl.colorDepth=16
+lvgl.fontSize=18
diff --git a/Devices/heltec-wifi-lora-32-v3/device.properties b/Devices/heltec-wifi-lora-32-v3/device.properties
index ab9ef2649..84afa8f0f 100644
--- a/Devices/heltec-wifi-lora-32-v3/device.properties
+++ b/Devices/heltec-wifi-lora-32-v3/device.properties
@@ -1,30 +1,24 @@
-[general]
-vendor=Heltec
-name=WiFi LoRa 32 v3
-incubating=true
+general.vendor=Heltec
+general.name=WiFi LoRa 32 v3
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=8MB
-spiRam=false
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=8MB
+hardware.spiRam=false
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=0.96"
-shape=rectangle
-dpi=149
+display.size=0.96"
+display.shape=rectangle
+display.dpi=149
-[cdn]
-infoMessage=Due to the small size of the screen, the icons don't render properly.
+cdn.infoMessage=Due to the small size of the screen, the icons don't render properly.
-[lvgl]
-theme=Mono
-colorDepth=16
-uiScale=70
-uiDensity=compact
+lvgl.theme=Mono
+lvgl.colorDepth=16
+lvgl.uiScale=70
+lvgl.uiDensity=compact
diff --git a/Devices/lilygo-tdeck/device.properties b/Devices/lilygo-tdeck/device.properties
index 6e3fd1a1b..cba55320e 100644
--- a/Devices/lilygo-tdeck/device.properties
+++ b/Devices/lilygo-tdeck/device.properties
@@ -1,27 +1,21 @@
-[general]
-vendor=LilyGO
-name=T-Deck,T-Deck Plus
+general.vendor=LilyGO
+general.name=T-Deck,T-Deck Plus
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=2.8"
-shape=rectangle
-dpi=143
+display.size=2.8"
+display.shape=rectangle
+display.dpi=143
-[cdn]
-infoMessage=To put the device into bootloader mode:
1. Press the trackball and then the reset button at the same time,
2. Let go of the reset button, then the trackball.
When this website reports that flashing is finished, you likely have to press the reset button.
+cdn.infoMessage=To put the device into bootloader mode:
1. Press the trackball and then the reset button at the same time,
2. Let go of the reset button, then the trackball.
When this website reports that flashing is finished, you likely have to press the reset button.
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/lilygo-tdisplay-s3/device.properties b/Devices/lilygo-tdisplay-s3/device.properties
index 144f72795..006ae7393 100644
--- a/Devices/lilygo-tdisplay-s3/device.properties
+++ b/Devices/lilygo-tdisplay-s3/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=LilyGO
-name=T-Display S3
+general.vendor=LilyGO
+general.name=T-Display S3
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.9"
-shape=rectangle
-dpi=191
+display.size=1.9"
+display.shape=rectangle
+display.dpi=191
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/lilygo-tdisplay/device.properties b/Devices/lilygo-tdisplay/device.properties
index 357be5d0e..0dd37c332 100644
--- a/Devices/lilygo-tdisplay/device.properties
+++ b/Devices/lilygo-tdisplay/device.properties
@@ -1,23 +1,18 @@
-[general]
-vendor=LilyGO
-name=T-Display
-incubating=true
+general.vendor=LilyGO
+general.name=T-Display
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32
-flashSize=16MB
-spiRam=false
-esptoolFlashFreq=80M
+hardware.target=ESP32
+hardware.flashSize=16MB
+hardware.spiRam=false
+hardware.esptoolFlashFreq=80M
-[display]
-size=1.14"
-shape=rectangle
-dpi=242
+display.size=1.14"
+display.shape=rectangle
+display.dpi=242
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/lilygo-tdongle-s3/device.properties b/Devices/lilygo-tdongle-s3/device.properties
index 9c05614fe..62d1e2187 100644
--- a/Devices/lilygo-tdongle-s3/device.properties
+++ b/Devices/lilygo-tdongle-s3/device.properties
@@ -1,26 +1,21 @@
-[general]
-vendor=LilyGO
-name=T-Dongle S3
-incubating=true
+general.vendor=LilyGO
+general.name=T-Dongle S3
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=false
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=false
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=0.96"
-shape=rectangle
-dpi=186
+display.size=0.96"
+display.shape=rectangle
+display.dpi=186
-[lvgl]
-colorDepth=16
-uiDensity=compact
-fontSize=10
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
+lvgl.fontSize=10
diff --git a/Devices/lilygo-thmi/device.properties b/Devices/lilygo-thmi/device.properties
index 0012b3d9c..4da5dd345 100644
--- a/Devices/lilygo-thmi/device.properties
+++ b/Devices/lilygo-thmi/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=LilyGO
-name=T-HMI
+general.vendor=LilyGO
+general.name=T-HMI
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=2.8"
-shape=rectangle
-dpi=125
+display.size=2.8"
+display.shape=rectangle
+display.dpi=125
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/lilygo-tlora-pager/device.properties b/Devices/lilygo-tlora-pager/device.properties
index d3c82f7ad..a74d00ca7 100644
--- a/Devices/lilygo-tlora-pager/device.properties
+++ b/Devices/lilygo-tlora-pager/device.properties
@@ -1,26 +1,21 @@
-[general]
-vendor=LilyGO
-name=T-Lora Pager
+general.vendor=LilyGO
+general.name=T-Lora Pager
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-flashMode=DIO
-spiRam=true
-spiRamMode=AUTO
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=40M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.flashMode=DIO
+hardware.spiRam=true
+hardware.spiRamMode=AUTO
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=40M
+hardware.bluetooth=true
-[display]
-size=2.33"
-shape=rectangle
-dpi=227
+display.size=2.33"
+display.shape=rectangle
+display.dpi=227
-[lvgl]
-colorDepth=16
-dpi=150
+lvgl.colorDepth=16
+lvgl.dpi=150
diff --git a/Devices/m5stack-cardputer-adv/device.properties b/Devices/m5stack-cardputer-adv/device.properties
index 5e72b513d..e500bcf08 100644
--- a/Devices/m5stack-cardputer-adv/device.properties
+++ b/Devices/m5stack-cardputer-adv/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=M5Stack
-name=Cardputer Adv
+general.vendor=M5Stack
+general.name=Cardputer Adv
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=8MB
-spiRam=false
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=8MB
+hardware.spiRam=false
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.14"
-shape=rectangle
+display.size=1.14"
+display.shape=rectangle
# TODO: dps is actually 242, but this breaks UI (button selection becomes invisible and switch visibility is reduced)
-dpi=139
+display.dpi=139
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/m5stack-cardputer/device.properties b/Devices/m5stack-cardputer/device.properties
index 55e7cb1ea..c2419c324 100644
--- a/Devices/m5stack-cardputer/device.properties
+++ b/Devices/m5stack-cardputer/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=M5Stack
-name=Cardputer,Cardputer v1.1
+general.vendor=M5Stack
+general.name=Cardputer,Cardputer v1.1
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=8MB
-spiRam=false
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=8MB
+hardware.spiRam=false
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.14"
-shape=rectangle
+display.size=1.14"
+display.shape=rectangle
# TODO: dps is actually 242, but this breaks UI (button selection becomes invisible and switch visibility is reduced)
-dpi=139
+display.dpi=139
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/m5stack-core2/device.properties b/Devices/m5stack-core2/device.properties
index 74e074cfd..eafb7c194 100644
--- a/Devices/m5stack-core2/device.properties
+++ b/Devices/m5stack-core2/device.properties
@@ -1,25 +1,19 @@
-[general]
-vendor=M5Stack
-name=Core2
+general.vendor=M5Stack
+general.name=Core2
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32
-flashSize=16MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=80M
-esptoolFlashFreq=80M
+hardware.target=ESP32
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=80M
+hardware.esptoolFlashFreq=80M
-[display]
-size=2"
-shape=rectangle
-dpi=200
+display.size=2"
+display.shape=rectangle
+display.dpi=200
-[cdn]
-warningMessage=This board implementation concerns the original Core2 hardware and **not** the v1.1 variant
+cdn.warningMessage=This board implementation concerns the original Core2 hardware and **not** the v1.1 variant
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/m5stack-cores3/device.properties b/Devices/m5stack-cores3/device.properties
index c7bf4ef5e..8fbb67685 100644
--- a/Devices/m5stack-cores3/device.properties
+++ b/Devices/m5stack-cores3/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=M5Stack
-name=CoreS3
+general.vendor=M5Stack
+general.name=CoreS3
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=2"
-shape=rectangle
-dpi=200
+display.size=2"
+display.shape=rectangle
+display.dpi=200
-[lvgl]
-colorDepth=16
\ No newline at end of file
+lvgl.colorDepth=16
\ No newline at end of file
diff --git a/Devices/m5stack-papers3/device.properties b/Devices/m5stack-papers3/device.properties
index 48bf0bc41..80ce7247e 100644
--- a/Devices/m5stack-papers3/device.properties
+++ b/Devices/m5stack-papers3/device.properties
@@ -1,32 +1,26 @@
-[general]
-vendor=M5Stack
-name=PaperS3
-incubating=true
+general.vendor=M5Stack
+general.name=PaperS3
+general.incubating=true
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=esp32s3
-flashSize=16MB
-spiRam=true
-spiRamMode=OPI
-spiRamSpeed=80M
-esptoolFlashFreq=80M
-tinyUsb=true
-bluetooth=true
+hardware.target=esp32s3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OPI
+hardware.spiRamSpeed=80M
+hardware.esptoolFlashFreq=80M
+hardware.tinyUsb=true
+hardware.bluetooth=true
-[display]
-size=4.7"
-shape=rectangle
-dpi=235
+display.size=4.7"
+display.shape=rectangle
+display.dpi=235
-[lvgl]
-colorDepth=8
-fontSize=24
-theme=Mono
+lvgl.colorDepth=8
+lvgl.fontSize=24
+lvgl.theme=Mono
-[sdkconfig]
-CONFIG_EPD_DISPLAY_TYPE_ED047TC2=y
+sdkconfig.CONFIG_EPD_DISPLAY_TYPE_ED047TC2=y
diff --git a/Devices/m5stack-stackchan/device.properties b/Devices/m5stack-stackchan/device.properties
index 7567bd6ff..ad8c15c1a 100644
--- a/Devices/m5stack-stackchan/device.properties
+++ b/Devices/m5stack-stackchan/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=M5Stack
-name=StackChan
+general.vendor=M5Stack
+general.name=StackChan
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=2"
-shape=rectangle
-dpi=200
+display.size=2"
+display.shape=rectangle
+display.dpi=200
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Devices/m5stack-stickc-plus/device.properties b/Devices/m5stack-stickc-plus/device.properties
index f15835911..181cd2422 100644
--- a/Devices/m5stack-stickc-plus/device.properties
+++ b/Devices/m5stack-stickc-plus/device.properties
@@ -1,23 +1,18 @@
-[general]
-vendor=M5Stack
-name=StickC Plus
-incubating=true
+general.vendor=M5Stack
+general.name=StickC Plus
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32
-flashSize=4MB
-spiRam=false
-esptoolFlashFreq=80M
+hardware.target=ESP32
+hardware.flashSize=4MB
+hardware.spiRam=false
+hardware.esptoolFlashFreq=80M
-[display]
-size=1.14"
-shape=rectangle
-dpi=242
+display.size=1.14"
+display.shape=rectangle
+display.dpi=242
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/m5stack-stickc-plus2/device.properties b/Devices/m5stack-stickc-plus2/device.properties
index 1b3074e0a..f763c2ff4 100644
--- a/Devices/m5stack-stickc-plus2/device.properties
+++ b/Devices/m5stack-stickc-plus2/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=M5Stack
-name=StickC Plus2
-incubating=true
+general.vendor=M5Stack
+general.name=StickC Plus2
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32
-flashSize=8MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=80M
-esptoolFlashFreq=80M
+hardware.target=ESP32
+hardware.flashSize=8MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=80M
+hardware.esptoolFlashFreq=80M
-[display]
-size=1.14"
-shape=rectangle
-dpi=242
+display.size=1.14"
+display.shape=rectangle
+display.dpi=242
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/m5stack-sticks3/device.properties b/Devices/m5stack-sticks3/device.properties
index d1adebb92..a055ee356 100644
--- a/Devices/m5stack-sticks3/device.properties
+++ b/Devices/m5stack-sticks3/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=M5Stack
-name=StickS3
+general.vendor=M5Stack
+general.name=StickS3
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=8MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=80M
-esptoolFlashFreq=80M
-tinyUsb=true
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=8MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=80M
+hardware.esptoolFlashFreq=80M
+hardware.tinyUsb=true
+hardware.bluetooth=true
-[display]
-size=1.14"
-shape=rectangle
-dpi=242
+display.size=1.14"
+display.shape=rectangle
+display.dpi=242
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/m5stack-tab5/device.properties b/Devices/m5stack-tab5/device.properties
index 6fab5fd33..dbb155125 100644
--- a/Devices/m5stack-tab5/device.properties
+++ b/Devices/m5stack-tab5/device.properties
@@ -1,51 +1,45 @@
-[general]
-vendor=M5Stack
-name=Tab5
+general.vendor=M5Stack
+general.name=Tab5
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32P4
-flashSize=16MB
-spiRam=true
-spiRamMode=HEX
-spiRamSpeed=200M
-esptoolFlashFreq=80M
-bluetooth=true
-usbHostEnabled=true
-tinyUsb=true
+hardware.target=ESP32P4
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=HEX
+hardware.spiRamSpeed=200M
+hardware.esptoolFlashFreq=80M
+hardware.bluetooth=true
+hardware.usbHostEnabled=true
+hardware.tinyUsb=true
-[display]
-size=5"
-shape=rectangle
-dpi=294
+display.size=5"
+display.shape=rectangle
+display.dpi=294
-[lvgl]
-colorDepth=16
-fontSize=28
-dpi=250
+lvgl.colorDepth=16
+lvgl.fontSize=28
+lvgl.dpi=250
-[sdkconfig]
-CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
-CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
-CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
-CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
-CONFIG_ESP_HOSTED_ENABLED=y
-CONFIG_ESP_HOSTED_SDIO_HOST_INTERFACE=y
-CONFIG_ESP_HOSTED_SDIO_SLOT_1=y
-CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CMD_SLOT_1=13
-CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CLK_SLOT_1=12
-CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D0_SLOT_1=11
-CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D1_4BIT_BUS_SLOT_1=10
-CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D2_4BIT_BUS_SLOT_1=9
-CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D3_4BIT_BUS_SLOT_1=8
-CONFIG_ESP_HOSTED_SDIO_GPIO_RESET_SLAVE=15
+sdkconfig.CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
+sdkconfig.CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
+sdkconfig.CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
+sdkconfig.CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
+sdkconfig.CONFIG_ESP_HOSTED_ENABLED=y
+sdkconfig.CONFIG_ESP_HOSTED_SDIO_HOST_INTERFACE=y
+sdkconfig.CONFIG_ESP_HOSTED_SDIO_SLOT_1=y
+sdkconfig.CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CMD_SLOT_1=13
+sdkconfig.CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CLK_SLOT_1=12
+sdkconfig.CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D0_SLOT_1=11
+sdkconfig.CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D1_4BIT_BUS_SLOT_1=10
+sdkconfig.CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D2_4BIT_BUS_SLOT_1=9
+sdkconfig.CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D3_4BIT_BUS_SLOT_1=8
+sdkconfig.CONFIG_ESP_HOSTED_SDIO_GPIO_RESET_SLAVE=15
# Fixes recent changes to esp_hosted
-CONFIG_ESP_HOSTED_USE_MEMPOOL=n
+sdkconfig.CONFIG_ESP_HOSTED_USE_MEMPOOL=n
# Performance: larger L2 cache reduces PSRAM stalls for draw/DPI buffers
-CONFIG_CACHE_L2_CACHE_256KB=y
+sdkconfig.CONFIG_CACHE_L2_CACHE_256KB=y
# Performance: use P4's PPA (pixel processing accelerator for rotation)
-CONFIG_LVGL_PORT_ENABLE_PPA=y
-CONFIG_LV_DRAW_BUF_ALIGN=64
-CONFIG_LV_DEF_REFR_PERIOD=15
+sdkconfig.CONFIG_LVGL_PORT_ENABLE_PPA=y
+sdkconfig.CONFIG_LV_DRAW_BUF_ALIGN=64
+sdkconfig.CONFIG_LV_DEF_REFR_PERIOD=15
diff --git a/Devices/simulator/device.properties b/Devices/simulator/device.properties
index ef614416f..1c66595e5 100644
--- a/Devices/simulator/device.properties
+++ b/Devices/simulator/device.properties
@@ -1,13 +1,9 @@
-[general]
-vendor=Simulator
-name=Tab5Simulator
+general.vendor=Simulator
+general.name=Tab5Simulator
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=POSIX
+hardware.target=POSIX
-[lvgl]
-colorDepth=16
-fontSize=14
+lvgl.colorDepth=16
+lvgl.fontSize=14
diff --git a/Devices/unphone/device.properties b/Devices/unphone/device.properties
index 6ff02cfa3..82ecc6589 100644
--- a/Devices/unphone/device.properties
+++ b/Devices/unphone/device.properties
@@ -1,25 +1,19 @@
-[general]
-vendor=unPhone
-name=unPhone
+general.vendor=unPhone
+general.name=unPhone
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=8MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=80M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=8MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=80M
+hardware.bluetooth=true
-[display]
-size=3.5"
-shape=rectangle
-dpi=165
+display.size=3.5"
+display.shape=rectangle
+display.dpi=165
-[cdn]
-warningMessage=Put the device into bootloader mode by pressing the center nav button and reset for 2-3 seconds, then release reset, then release the nav button.
After flashing is finished, press the reset button to reboot.
+cdn.warningMessage=Put the device into bootloader mode by pressing the center nav button and reset for 2-3 seconds, then release reset, then release the nav button.
After flashing is finished, press the reset button to reboot.
-[lvgl]
-colorDepth=24
+lvgl.colorDepth=24
diff --git a/Devices/waveshare-esp32-s3-geek/device.properties b/Devices/waveshare-esp32-s3-geek/device.properties
index 5c12f0770..f17c7f40f 100644
--- a/Devices/waveshare-esp32-s3-geek/device.properties
+++ b/Devices/waveshare-esp32-s3-geek/device.properties
@@ -1,33 +1,27 @@
-[general]
-vendor=Waveshare
-name=ESP32 S3 GEEK
-incubating=true
+general.vendor=Waveshare
+general.name=ESP32 S3 GEEK
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.14"
-shape=rectangle
-dpi=143
+display.size=1.14"
+display.shape=rectangle
+display.dpi=143
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
-[sdkconfig]
# Fix error "PSRAM space not enough for the Flash instructions" on boot:
-CONFIG_SPIRAM_FETCH_INSTRUCTIONS=n
-CONFIG_SPIRAM_RODATA=n
-CONFIG_SPIRAM_XIP_FROM_PSRAM=n
+sdkconfig.CONFIG_SPIRAM_FETCH_INSTRUCTIONS=n
+sdkconfig.CONFIG_SPIRAM_RODATA=n
+sdkconfig.CONFIG_SPIRAM_XIP_FROM_PSRAM=n
diff --git a/Devices/waveshare-s3-lcd-13/device.properties b/Devices/waveshare-s3-lcd-13/device.properties
index f22f10836..6e7e57052 100644
--- a/Devices/waveshare-s3-lcd-13/device.properties
+++ b/Devices/waveshare-s3-lcd-13/device.properties
@@ -1,27 +1,22 @@
-[general]
-vendor=WaveShare
-name=S3 LCD 1.3"
-incubating=true
+general.vendor=WaveShare
+general.name=S3 LCD 1.3"
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.3"
-shape=rectangle
-dpi=261
+display.size=1.3"
+display.shape=rectangle
+display.dpi=261
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/waveshare-s3-touch-lcd-128/device.properties b/Devices/waveshare-s3-touch-lcd-128/device.properties
index 055d736a0..5f03f80aa 100644
--- a/Devices/waveshare-s3-touch-lcd-128/device.properties
+++ b/Devices/waveshare-s3-touch-lcd-128/device.properties
@@ -1,33 +1,27 @@
-[general]
-vendor=WaveShare
-name=S3 Touch LCD 1.28"
-incubating=true
+general.vendor=WaveShare
+general.name=S3 Touch LCD 1.28"
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.28"
-shape=circle
-dpi=265
+display.size=1.28"
+display.shape=circle
+display.dpi=265
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
-[sdkconfig]
# Fix error "PSRAM space not enough for the Flash instructions" on boot:
-CONFIG_SPIRAM_FETCH_INSTRUCTIONS=n
-CONFIG_SPIRAM_RODATA=n
-CONFIG_SPIRAM_XIP_FROM_PSRAM=n
\ No newline at end of file
+sdkconfig.CONFIG_SPIRAM_FETCH_INSTRUCTIONS=n
+sdkconfig.CONFIG_SPIRAM_RODATA=n
+sdkconfig.CONFIG_SPIRAM_XIP_FROM_PSRAM=n
\ No newline at end of file
diff --git a/Devices/waveshare-s3-touch-lcd-147/device.properties b/Devices/waveshare-s3-touch-lcd-147/device.properties
index 645596849..c4f263b2d 100644
--- a/Devices/waveshare-s3-touch-lcd-147/device.properties
+++ b/Devices/waveshare-s3-touch-lcd-147/device.properties
@@ -1,30 +1,24 @@
-[general]
-vendor=WaveShare
-name=S3 Touch LCD 1.47"
-incubating=true
+general.vendor=WaveShare
+general.name=S3 Touch LCD 1.47"
+general.incubating=true
-[apps]
-launcherAppId=Launcher
-autoStartAppId=ApWebServer
+apps.launcherAppId=Launcher
+apps.autoStartAppId=ApWebServer
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=1.47"
-shape=rectangle
-dpi=247
+display.size=1.47"
+display.shape=rectangle
+display.dpi=247
-[cdn]
-warningMessage=Touch doesn't work yet
+cdn.warningMessage=Touch doesn't work yet
-[lvgl]
-colorDepth=16
-uiDensity=compact
+lvgl.colorDepth=16
+lvgl.uiDensity=compact
diff --git a/Devices/waveshare-s3-touch-lcd-43/device.properties b/Devices/waveshare-s3-touch-lcd-43/device.properties
index 00a1e3f79..5bf22b8ca 100644
--- a/Devices/waveshare-s3-touch-lcd-43/device.properties
+++ b/Devices/waveshare-s3-touch-lcd-43/device.properties
@@ -1,25 +1,20 @@
-[general]
-vendor=WaveShare
-name=S3 Touch LCD 4.3"
+general.vendor=WaveShare
+general.name=S3 Touch LCD 4.3"
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=4MB
-spiRam=true
-spiRamMode=OCT
-spiRamSpeed=120M
-tinyUsb=true
-esptoolFlashFreq=120M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=4MB
+hardware.spiRam=true
+hardware.spiRamMode=OCT
+hardware.spiRamSpeed=120M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=120M
+hardware.bluetooth=true
-[display]
-size=4.3"
-shape=rectangle
-dpi=217
+display.size=4.3"
+display.shape=rectangle
+display.dpi=217
-[lvgl]
-colorDepth=16
-fontSize=18
+lvgl.colorDepth=16
+lvgl.fontSize=18
diff --git a/Devices/wireless-tag-wt32-sc01-plus/device.properties b/Devices/wireless-tag-wt32-sc01-plus/device.properties
index c46939aee..beecefe50 100644
--- a/Devices/wireless-tag-wt32-sc01-plus/device.properties
+++ b/Devices/wireless-tag-wt32-sc01-plus/device.properties
@@ -1,24 +1,19 @@
-[general]
-vendor=Wireless Tag
-name=WT32 SC01 Plus
+general.vendor=Wireless Tag
+general.name=WT32 SC01 Plus
-[apps]
-launcherAppId=Launcher
+apps.launcherAppId=Launcher
-[hardware]
-target=ESP32S3
-flashSize=16MB
-spiRam=true
-spiRamMode=QUAD
-spiRamSpeed=80M
-tinyUsb=true
-esptoolFlashFreq=80M
-bluetooth=true
+hardware.target=ESP32S3
+hardware.flashSize=16MB
+hardware.spiRam=true
+hardware.spiRamMode=QUAD
+hardware.spiRamSpeed=80M
+hardware.tinyUsb=true
+hardware.esptoolFlashFreq=80M
+hardware.bluetooth=true
-[display]
-size=3.5"
-shape=rectangle
-dpi=165
+display.size=3.5"
+display.shape=rectangle
+display.dpi=165
-[lvgl]
-colorDepth=16
+lvgl.colorDepth=16
diff --git a/Firmware/CMakeLists.txt b/Firmware/CMakeLists.txt
index bd04a6312..1d19bc1ce 100644
--- a/Firmware/CMakeLists.txt
+++ b/Firmware/CMakeLists.txt
@@ -22,7 +22,7 @@ set(DEVICETREE_LOCATION "${PROJECT_ROOT}/Devices/${TACTILITY_DEVICE_ID}")
# Fixes the sdkconfig bluetooth enable options from getting nuked on non-P4+C6 builds when idf build runs
if (DEFINED ENV{ESP_IDF_VERSION})
file(READ "${DEVICETREE_LOCATION}/device.properties" device_properties_content)
- if (device_properties_content MATCHES "bluetooth=true")
+ if (device_properties_content MATCHES "hardware\\.bluetooth=true")
list(APPEND REQUIRES_LIST bt)
endif()
endif()
diff --git a/Modules/lvgl-module/CMakeLists.txt b/Modules/lvgl-module/CMakeLists.txt
index f0afa8aa0..e499a89ed 100644
--- a/Modules/lvgl-module/CMakeLists.txt
+++ b/Modules/lvgl-module/CMakeLists.txt
@@ -44,7 +44,7 @@ READ_PROPERTIES_TO_MAP(
device_properties
)
# Read UI density
-GET_VALUE_FROM_MAP(device_properties "[lvgl]uiDensity" ui_density)
+GET_VALUE_FROM_MAP(device_properties "lvgl.uiDensity" ui_density)
# Define UiDensity enum value
if (ui_density)
if (ui_density STREQUAL "default")
@@ -52,7 +52,7 @@ if (ui_density)
elseif (ui_density STREQUAL "compact")
set(ui_density_variable "LVGL_UI_DENSITY_COMPACT")
else ()
- message(FATAL_ERROR "Invalid [lvgl]uiDensity: '${ui_density}'. Must be either 'default' or 'compact'")
+ message(FATAL_ERROR "Invalid lvgl.uiDensity: '${ui_density}'. Must be either 'default' or 'compact'")
endif ()
message("UI density set to '${ui_density}' via properties")
else ()
diff --git a/Tactility/Private/Tactility/app/AppManifestParsing.h b/Tactility/Private/Tactility/app/AppManifestParsing.h
index c2fc902bf..3be62387c 100644
--- a/Tactility/Private/Tactility/app/AppManifestParsing.h
+++ b/Tactility/Private/Tactility/app/AppManifestParsing.h
@@ -2,13 +2,13 @@
#include
-#include