Settings: Hybrid internal/external, unused for now

- Reverts part of acc352e61f
- Reverts part of ca5f3bb09a
- Based partly on 71d1c1d0f1
- Use FlipperInternalApplication for settings for settings
- Set FlipperInternalApplicationFlagExternal accordingly
- Keep storage and power settings internal, all others external
- Unused for now, uses too much flash:
  - Previously: 29kb free flash
  - All internal: 4kb free flash
  - Power internal: 22kb free flash
  - Power and storage internal: 16kb free flash
This commit is contained in:
Willy-JL
2024-09-06 01:26:07 +02:00
parent f65d4bb233
commit 1d4cba8c61
15 changed files with 74 additions and 60 deletions
+3 -1
View File
@@ -26,6 +26,7 @@ class FlipperAppType(Enum):
STARTUP = "StartupHook"
EXTERNAL = "External"
MENUEXTERNAL = "MenuExternal"
SETTINGSEXTERNAL = "SettingsExternal"
METAPACKAGE = "Package"
PLUGIN = "Plugin"
@@ -250,6 +251,7 @@ class AppBuildset:
FlipperAppType.APP,
FlipperAppType.DEBUG,
FlipperAppType.ARCHIVE,
FlipperAppType.SETTINGS,
FlipperAppType.STARTUP,
)
EXTERNAL_APP_TYPES_MAP = {
@@ -258,7 +260,7 @@ class AppBuildset:
FlipperAppType.PLUGIN: True,
FlipperAppType.DEBUG: True,
FlipperAppType.MENUEXTERNAL: False,
FlipperAppType.SETTINGS: False,
FlipperAppType.SETTINGSEXTERNAL: False,
}
@classmethod
+34 -27
View File
@@ -23,22 +23,20 @@ class ApplicationsCGenerator:
FlipperAppType.SYSTEM: ("FlipperInternalApplication", "FLIPPER_SYSTEM_APPS"),
FlipperAppType.APP: ("FlipperInternalApplication", "FLIPPER_APPS"),
FlipperAppType.DEBUG: ("FlipperInternalApplication", "FLIPPER_DEBUG_APPS"),
FlipperAppType.SETTINGS: (
"FlipperInternalApplication",
"FLIPPER_SETTINGS_APPS",
),
FlipperAppType.STARTUP: (
"FlipperInternalOnStartHook",
"FLIPPER_ON_SYSTEM_START",
),
}
EXTERNAL_TYPE_MAP = {
FlipperAppType.MENUEXTERNAL: (
"FlipperExternalApplication",
"FLIPPER_EXTERNAL_APPS",
),
FlipperAppType.SETTINGS: (
"FlipperExternalApplication",
"FLIPPER_SETTINGS_APPS",
),
}
APP_EXTERNAL_TYPE = (
"FlipperExternalApplication",
"FLIPPER_EXTERNAL_APPS",
)
def __init__(self, buildset: AppBuildset, autorun_app: str = ""):
self.buildset = buildset
@@ -52,13 +50,26 @@ class ApplicationsCGenerator:
def get_app_descr(self, app: FlipperApplication):
if app.apptype == FlipperAppType.STARTUP:
return app.entry_point
if app.apptype == FlipperAppType.SETTINGSEXTERNAL:
app_path = "/ext/apps"
if app.fap_category:
app_path += f"/{app.fap_category}"
app_path += f"/{app.appid}.fap"
flags = app.flags + ["External"]
return f"""
{{.app = NULL,
.name = "{app.name}",
.path = "{app_path}",
.stack_size = 0,
.icon = {f"&{app.icon}" if app.icon else "NULL"},
.flags = {'|'.join(f"FlipperInternalApplicationFlag{flag}" for flag in flags)} }}"""
return f"""
{{.app = {app.entry_point},
.name = "{app.name}",
.appid = "{app.appid}",
.stack_size = {app.stack_size},
.icon = {f"&{app.icon}" if app.icon else "NULL"},
.flags = {'|'.join(f"FlipperApplicationFlag{flag}" for flag in app.flags)} }}"""
.flags = {'|'.join(f"FlipperInternalApplicationFlag{flag}" for flag in app.flags)} }}"""
def get_external_app_descr(self, app: FlipperApplication):
app_path = "/ext/apps"
@@ -69,8 +80,7 @@ class ApplicationsCGenerator:
{{
.name = "{app.name}",
.icon = {f"&{app.icon}" if app.icon else "NULL"},
.path = "{app_path}",
.flags = {'|'.join(f"FlipperApplicationFlag{flag}" for flag in app.flags)} }}"""
.path = "{app_path}" }}"""
def generate(self):
contents = [
@@ -84,11 +94,11 @@ class ApplicationsCGenerator:
)
entry_type, entry_block = self.APP_TYPE_MAP[apptype]
contents.append(f"const {entry_type} {entry_block}[] = {{")
contents.append(
",\n".join(
map(self.get_app_descr, self.buildset.get_apps_of_type(apptype))
)
)
apps = self.buildset.get_apps_of_type(apptype)
if apptype is FlipperAppType.SETTINGS:
apps += self.buildset.get_apps_of_type(FlipperAppType.SETTINGSEXTERNAL)
apps.sort(key=lambda app: app.order)
contents.append(",\n".join(map(self.get_app_descr, apps)))
contents.append("};")
contents.append(
f"const size_t {entry_block}_COUNT = COUNT_OF({entry_block});"
@@ -103,15 +113,12 @@ class ApplicationsCGenerator:
]
)
for apptype in self.EXTERNAL_TYPE_MAP:
entry_type, entry_block = self.EXTERNAL_TYPE_MAP[apptype]
external_apps = self.buildset.get_apps_of_type(apptype)
contents.append(f"const {entry_type} {entry_block}[] = {{")
contents.append(",\n".join(map(self.get_external_app_descr, external_apps)))
contents.append("};")
contents.append(
f"const size_t {entry_block}_COUNT = COUNT_OF({entry_block});"
)
entry_type, entry_block = self.APP_EXTERNAL_TYPE
external_apps = self.buildset.get_apps_of_type(FlipperAppType.MENUEXTERNAL)
contents.append(f"const {entry_type} {entry_block}[] = {{")
contents.append(",\n".join(map(self.get_external_app_descr, external_apps)))
contents.append("};")
contents.append(f"const size_t {entry_block}_COUNT = COUNT_OF({entry_block});")
return "\n".join(contents)
+1 -1
View File
@@ -491,7 +491,7 @@ def _gather_app_components(env, appname) -> AppDeploymentComponents:
if host_app.apptype in [
FlipperAppType.EXTERNAL,
FlipperAppType.MENUEXTERNAL,
FlipperAppType.SETTINGS,
FlipperAppType.SETTINGSEXTERNAL,
]:
components.add_app(host_app)
else:
+1 -1
View File
@@ -232,7 +232,7 @@ apps_to_build_as_faps = [
FlipperAppType.PLUGIN,
FlipperAppType.EXTERNAL,
FlipperAppType.MENUEXTERNAL,
FlipperAppType.SETTINGS,
FlipperAppType.SETTINGSEXTERNAL,
]
known_extapps = [