Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into xfw-dev --nobuild

This commit is contained in:
Willy-JL
2023-09-16 17:46:39 +02:00
55 changed files with 1885 additions and 1569 deletions

View File

@@ -11,10 +11,21 @@ bool flipper_application_manifest_is_valid(const FlipperApplicationManifest* man
return true;
}
bool flipper_application_manifest_is_compatible(
bool flipper_application_manifest_is_too_old(
const FlipperApplicationManifest* manifest,
const ElfApiInterface* api_interface) {
if(manifest->base.api_version.major != api_interface->api_version_major /* ||
if(manifest->base.api_version.major < api_interface->api_version_major /* ||
manifest->base.api_version.minor > app->api_interface->api_version_minor */) {
return false;
}
return true;
}
bool flipper_application_manifest_is_too_new(
const FlipperApplicationManifest* manifest,
const ElfApiInterface* api_interface) {
if(manifest->base.api_version.major > api_interface->api_version_major /* ||
manifest->base.api_version.minor > app->api_interface->api_version_minor */) {
return false;
}

View File

@@ -54,14 +54,25 @@ typedef FlipperApplicationManifestV1 FlipperApplicationManifest;
*/
bool flipper_application_manifest_is_valid(const FlipperApplicationManifest* manifest);
/**
* @brief Check if manifest is compatible with current ELF API interface
*
* @param manifest
* @param api_interface
* @return bool
/** Check if API Version declared in manifest is older than firmware ELF API interface
*
* @param manifest The manifest
* @param api_interface The api interface
*
* @return bool
*/
bool flipper_application_manifest_is_compatible(
bool flipper_application_manifest_is_too_old(
const FlipperApplicationManifest* manifest,
const ElfApiInterface* api_interface);
/** Check if API Version declared in manifest is newer than firmware ELF API interface
*
* @param manifest The manifest
* @param api_interface The api interface
*
* @return bool
*/
bool flipper_application_manifest_is_too_new(
const FlipperApplicationManifest* manifest,
const ElfApiInterface* api_interface);

View File

@@ -102,9 +102,14 @@ static FlipperApplicationPreloadStatus
return FlipperApplicationPreloadStatusTargetMismatch;
}
if(!flipper_application_manifest_is_compatible(
if(!flipper_application_manifest_is_too_old(
&app->manifest, elf_file_get_api_interface(app->elf))) {
return FlipperApplicationPreloadStatusApiMismatch;
return FlipperApplicationPreloadStatusApiTooOld;
}
if(!flipper_application_manifest_is_too_new(
&app->manifest, elf_file_get_api_interface(app->elf))) {
return FlipperApplicationPreloadStatusApiTooNew;
}
return FlipperApplicationPreloadStatusSuccess;
@@ -258,7 +263,10 @@ static const char* preload_status_strings[] = {
[FlipperApplicationPreloadStatusUnspecifiedError] = "Unknown error",
[FlipperApplicationPreloadStatusInvalidFile] = "Invalid file",
[FlipperApplicationPreloadStatusInvalidManifest] = "Invalid file manifest",
[FlipperApplicationPreloadStatusApiMismatch] = "API version mismatch",
[FlipperApplicationPreloadStatusApiTooOld] =
"Update Application to use with this Firmware (ApiTooOld)",
[FlipperApplicationPreloadStatusApiTooNew] =
"Update Firmware to use with this Application (ApiTooNew)",
[FlipperApplicationPreloadStatusTargetMismatch] = "Hardware target mismatch",
};
@@ -266,7 +274,8 @@ static const char* load_status_strings[] = {
[FlipperApplicationLoadStatusSuccess] = "Success",
[FlipperApplicationLoadStatusUnspecifiedError] = "Unknown error",
[FlipperApplicationLoadStatusNoFreeMemory] = "Out of memory",
[FlipperApplicationLoadStatusMissingImports] = "Found unsatisfied imports",
[FlipperApplicationLoadStatusMissingImports] =
"Update Firmware to use with this Application (MissingImports)",
};
const char* flipper_application_preload_status_to_string(FlipperApplicationPreloadStatus status) {
@@ -330,7 +339,8 @@ bool flipper_application_load_name_and_icon(
flipper_application_preload_manifest(app, furi_string_get_cstr(path));
if(preload_res == FlipperApplicationPreloadStatusSuccess ||
preload_res == FlipperApplicationPreloadStatusApiMismatch) {
preload_res == FlipperApplicationPreloadStatusApiTooOld ||
preload_res == FlipperApplicationPreloadStatusApiTooNew) {
const FlipperApplicationManifest* manifest = flipper_application_get_manifest(app);
if(manifest->has_icon && icon_ptr != NULL && *icon_ptr != NULL) {
memcpy(*icon_ptr, manifest->icon, FAP_MANIFEST_MAX_ICON_SIZE);

View File

@@ -21,7 +21,8 @@ typedef enum {
FlipperApplicationPreloadStatusUnspecifiedError,
FlipperApplicationPreloadStatusInvalidFile,
FlipperApplicationPreloadStatusInvalidManifest,
FlipperApplicationPreloadStatusApiMismatch,
FlipperApplicationPreloadStatusApiTooOld,
FlipperApplicationPreloadStatusApiTooNew,
FlipperApplicationPreloadStatusTargetMismatch,
} FlipperApplicationPreloadStatus;