1
mirror of https://github.com/flipperdevices/flipperzero-firmware.git synced 2025-12-12 04:41:26 +04:00

Icons: compression fixes & larger dimension support (#3564)

* toolbox, gui: fixes for compressed icon handling
* ufbt: fixes for generated vscode project
* scripts: increased max dimensions for image converter
* icon type changes
* linter fixes; api sync
* gui: docs fix
* toolbox: fixed potential decoder buffer overflow
* minor cleanup
* fbt: sdk: suppressed deprecation warnings in API table
* toolbox: compress: added unit tests
   vscode: now installs resources for unit_tests
   unit_tests: now loads subghz region data
* toolbox: compress: review fixes, pt 1
* compress: now passes decoder buffer size as constructor argument; auto-resize decoder buffer; crash on failed icon decompression
* PVS fixes
* pvs fixes, pt2
* doxygen fixes
* investigating unit test failures
* investigating unit test failures
* investigating unit test failures
* investigating unit test failures
* investigating unit test failures
* UnitTests: move all tests into plugins, brakes testing
* UnitTests: add plugin API and update plugin entrypoints
* UniTests: Test runner that works with plugins
* fbt: extra filtering for extapps to include in build
* UnitTests: filter tests by name
* loader: restored API table for unit_test build config
* Add various missing symbols to API table
* UnitTest: fail on plugin load error
* UnitTests: cleanup plugin api and reporting
* unit_tests: composite resolver
* UnitTests: remove unused declaration
* unit_tests, nfc: moved mock nfc implementation to libnfc
* unit_tests: api: removed redundant #define
* toolbox: compress: removed size_hint for icons; triggering furi_check on oversized icons
* gui: icon, icon_animation: removed size hit APIs
* Format Sources. Cleanup code.
* loader: refuse to start .fal as app
* toolbox: compress: fixed memory corruption in operations with small destination buffer; added unit tests for that case
* unit_tests: proper test skipping; better selective test interface
* unit_tests: moved 'loading' logging to proper location

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
hedger
2024-05-20 21:23:47 +04:00
committed by GitHub
parent d5339f8270
commit 9e42e00ead
72 changed files with 1127 additions and 337 deletions

View File

@@ -24,8 +24,8 @@ ICONS_TEMPLATE_C_FRAME = "const uint8_t {name}[] = {data};\n"
ICONS_TEMPLATE_C_DATA = "const uint8_t* const {name}[] = {data};\n"
ICONS_TEMPLATE_C_ICONS = "const Icon {name} = {{.width={width},.height={height},.frame_count={frame_count},.frame_rate={frame_rate},.frames=_{name}}};\n"
MAX_IMAGE_WIDTH = 128
MAX_IMAGE_HEIGHT = 64
MAX_IMAGE_WIDTH = 2**16 - 1
MAX_IMAGE_HEIGHT = 2**16 - 1
class Main(App):

View File

@@ -351,10 +351,10 @@ class AppBuildset:
).append(app)
def get_ext_apps(self):
return self.extapps
return list(self.extapps)
def get_incompatible_ext_apps(self):
return self.incompatible_extapps
return list(self.incompatible_extapps)
def _check_conflicts(self):
conflicts = []
@@ -399,14 +399,30 @@ class AppBuildset:
def _group_plugins(self):
known_extensions = self.get_apps_of_type(FlipperAppType.PLUGIN, all_known=True)
for extension_app in known_extensions:
keep_app = False
for parent_app_id in extension_app.requires:
try:
parent_app = self.appmgr.get(parent_app_id)
parent_app._plugins.append(extension_app)
if (
parent_app.apptype in self.BUILTIN_APP_TYPES
and parent_app_id in self.appnames
) or parent_app.apptype not in self.BUILTIN_APP_TYPES:
keep_app |= True
except FlipperManifestException:
self._writer(
f"Module {extension_app.appid} has unknown parent {parent_app_id}"
)
keep_app = True
# Debug output for plugin parentage
# print(
# f"Module {extension_app.appid} has parents {extension_app.requires} keep={keep_app}"
# )
if not keep_app and extension_app in self.extapps:
# print(f"Excluding plugin {extension_app.appid}")
self.extapps.remove(extension_app)
def get_apps_cdefs(self):
cdefs = set()
@@ -432,9 +448,11 @@ class AppBuildset:
return sorted(
filter(
lambda app: app.apptype == apptype,
self.appmgr.known_apps.values()
if all_known
else map(self.appmgr.get, self.appnames),
(
self.appmgr.known_apps.values()
if all_known
else map(self.appmgr.get, self.appnames)
),
),
key=lambda app: app.order,
)

View File

@@ -461,7 +461,8 @@ def _gather_app_components(env, appname) -> AppDeploymentComponents:
else:
# host app is a built-in app
components.add_app(artifacts_app_to_run)
components.extra_launch_args = f"-a {host_app.name}"
if host_app.name:
components.extra_launch_args = f"-a {host_app.name}"
else:
raise UserError("Host app is unknown")
else:

View File

@@ -198,6 +198,7 @@ def gen_sdk_data(sdk_cache: SdkCache):
api_def.extend(
(f"#include <{h.name}>" for h in sdk_cache.get_headers()),
)
api_def.append('#pragma GCC diagnostic ignored "-Wdeprecated-declarations"')
api_def.append(f"const int elf_api_version = {sdk_cache.version.as_int()};")