diff --git a/Buildscripts/CDN/generate-firmware-files.py b/Buildscripts/CDN/generate-firmware-files.py
index 23fd6126..c3f99483 100644
--- a/Buildscripts/CDN/generate-firmware-files.py
+++ b/Buildscripts/CDN/generate-firmware-files.py
@@ -2,11 +2,9 @@ import subprocess
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
+ 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: 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_property_or_none(properties: dict, group: str, key: str):
+ return properties.get(f"{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_boolean_property_or_false(properties: dict, group: str, key: str):
+ return properties.get(f"{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]
+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 e25beaa5..ed7eea05 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 e6d97c7f..b34ee6e4 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 c008356a..8c41c3e8 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 da517175..b54d29d5 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 99a9e204..ff1db8b3 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 3cfd1da4..c35b6414 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 7ebae0ac..239afa35 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 920c71ed..fedfa096 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 1520827d..6dc01205 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 54d406cf..94659bab 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 779ca631..f9b582a9 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 c2e68123..1895aa40 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 fad2d476..797e53f9 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 5ce9900a..0bc352e6 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 ddf3b78e..f1a00e28 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 f347cfb6..7843d829 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 8d684798..b768e157 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 529b1067..5f71e02e 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 e4152202..4dd70ea6 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 9155ce6d..c8941ee3 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 d417ef90..d2fefc16 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 e5a2ab82..3bb4a9d4 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 41865881..4ad803c6 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 9f7be588..a938ef23 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 c1f3a08a..dabe1b87 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 0dda312f..46c912bd 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 ab9ef264..84afa8f0 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 6e3fd1a1..cba55320 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 144f7279..006ae739 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 357be5d0..0dd37c33 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 9c05614f..62d1e218 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 0012b3d9..4da5dd34 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 d3c82f7a..a74d00ca 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 5e72b513..e500bcf0 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 55e7cb1e..c2419c32 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 74e074cf..eafb7c19 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 c7bf4ef5..8fbb6768 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 48bf0bc4..80ce7247 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 7567bd6f..ad8c15c1 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 f1583591..181cd242 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 1b3074e0..f763c2ff 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 d1adebb9..a055ee35 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 6fab5fd3..dbb15512 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 ef614416..1c66595e 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 6ff02cfa..82ecc658 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 5c12f077..f17c7f40 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 f22f1083..6e7e5705 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 055d736a..5f03f80a 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 64559684..c4f263b2 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 00a1e3f7..5bf22b8c 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 c46939ae..beecefe5 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 bd04a631..1d19bc1c 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 f0afa8aa..e499a89e 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 c2fc902b..3be62387 100644
--- a/Tactility/Private/Tactility/app/AppManifestParsing.h
+++ b/Tactility/Private/Tactility/app/AppManifestParsing.h
@@ -2,13 +2,13 @@
#include
-#include