1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 12:42:30 +04:00

NFC: Cache plugin name not full path, saves some RAM [ci skip]

by Willy-JL
This commit is contained in:
MX
2024-07-04 22:51:33 +03:00
parent bd6b2166ce
commit 223de97d8c

View File

@@ -24,7 +24,7 @@ typedef enum {
} NfcSupportedCardsPluginFeature; } NfcSupportedCardsPluginFeature;
typedef struct { typedef struct {
FuriString* path; FuriString* name;
NfcProtocol protocol; NfcProtocol protocol;
NfcSupportedCardsPluginFeature feature; NfcSupportedCardsPluginFeature feature;
} NfcSupportedCardsPluginCache; } NfcSupportedCardsPluginCache;
@@ -73,7 +73,7 @@ void nfc_supported_cards_free(NfcSupportedCards* instance) {
!NfcSupportedCardsPluginCache_end_p(iter); !NfcSupportedCardsPluginCache_end_p(iter);
NfcSupportedCardsPluginCache_next(iter)) { NfcSupportedCardsPluginCache_next(iter)) {
NfcSupportedCardsPluginCache* plugin_cache = NfcSupportedCardsPluginCache_ref(iter); NfcSupportedCardsPluginCache* plugin_cache = NfcSupportedCardsPluginCache_ref(iter);
furi_string_free(plugin_cache->path); furi_string_free(plugin_cache->name);
} }
NfcSupportedCardsPluginCache_clear(instance->plugins_cache_arr); NfcSupportedCardsPluginCache_clear(instance->plugins_cache_arr);
@@ -111,16 +111,21 @@ static void nfc_supported_cards_load_context_free(NfcSupportedCardsLoadContext*
static const NfcSupportedCardsPlugin* nfc_supported_cards_get_plugin( static const NfcSupportedCardsPlugin* nfc_supported_cards_get_plugin(
NfcSupportedCardsLoadContext* instance, NfcSupportedCardsLoadContext* instance,
const FuriString* path, const char* name,
const ElfApiInterface* api_interface) { const ElfApiInterface* api_interface) {
furi_assert(instance); furi_assert(instance);
furi_assert(path); furi_assert(name);
const NfcSupportedCardsPlugin* plugin = NULL; const NfcSupportedCardsPlugin* plugin = NULL;
do { do {
if(instance->app) flipper_application_free(instance->app); if(instance->app) flipper_application_free(instance->app);
instance->app = flipper_application_alloc(instance->storage, api_interface); instance->app = flipper_application_alloc(instance->storage, api_interface);
if(flipper_application_preload(instance->app, furi_string_get_cstr(path)) !=
// Reconstruct path
path_concat(NFC_SUPPORTED_CARDS_PLUGINS_PATH, name, instance->file_path);
furi_string_cat(instance->file_path, NFC_SUPPORTED_CARDS_PLUGIN_SUFFIX);
if(flipper_application_preload(instance->app, furi_string_get_cstr(instance->file_path)) !=
FlipperApplicationPreloadStatusSuccess) FlipperApplicationPreloadStatusSuccess)
break; break;
if(!flipper_application_is_plugin(instance->app)) break; if(!flipper_application_is_plugin(instance->app)) break;
@@ -155,9 +160,11 @@ static const NfcSupportedCardsPlugin* nfc_supported_cards_get_next_plugin(
if(!furi_string_end_with_str(instance->file_path, NFC_SUPPORTED_CARDS_PLUGIN_SUFFIX)) if(!furi_string_end_with_str(instance->file_path, NFC_SUPPORTED_CARDS_PLUGIN_SUFFIX))
continue; continue;
path_concat(NFC_SUPPORTED_CARDS_PLUGINS_PATH, instance->file_name, instance->file_path); size_t trim_suffix =
furi_string_size(instance->file_path) - strlen(NFC_SUPPORTED_CARDS_PLUGIN_SUFFIX);
instance->file_name[trim_suffix] = '\0';
plugin = nfc_supported_cards_get_plugin(instance, instance->file_path, api_interface); plugin = nfc_supported_cards_get_plugin(instance, instance->file_name, api_interface);
} while(plugin == NULL); //-V654 } while(plugin == NULL); //-V654
return plugin; return plugin;
@@ -181,7 +188,7 @@ void nfc_supported_cards_load_cache(NfcSupportedCards* instance) {
if(plugin == NULL) break; //-V547 if(plugin == NULL) break; //-V547
NfcSupportedCardsPluginCache plugin_cache = {}; //-V779 NfcSupportedCardsPluginCache plugin_cache = {}; //-V779
plugin_cache.path = furi_string_alloc_set(instance->load_context->file_path); plugin_cache.name = furi_string_alloc_set(instance->load_context->file_name);
plugin_cache.protocol = plugin->protocol; plugin_cache.protocol = plugin->protocol;
if(plugin->verify) { if(plugin->verify) {
plugin_cache.feature |= NfcSupportedCardsPluginFeatureHasVerify; plugin_cache.feature |= NfcSupportedCardsPluginFeatureHasVerify;
@@ -233,7 +240,7 @@ bool nfc_supported_cards_read(NfcSupportedCards* instance, NfcDevice* device, Nf
const ElfApiInterface* api_interface = const ElfApiInterface* api_interface =
composite_api_resolver_get(instance->api_resolver); composite_api_resolver_get(instance->api_resolver);
const NfcSupportedCardsPlugin* plugin = nfc_supported_cards_get_plugin( const NfcSupportedCardsPlugin* plugin = nfc_supported_cards_get_plugin(
instance->load_context, plugin_cache->path, api_interface); instance->load_context, furi_string_get_cstr(plugin_cache->name), api_interface);
if(plugin == NULL) continue; if(plugin == NULL) continue;
if(plugin->verify) { if(plugin->verify) {
@@ -281,7 +288,7 @@ bool nfc_supported_cards_parse(
const ElfApiInterface* api_interface = const ElfApiInterface* api_interface =
composite_api_resolver_get(instance->api_resolver); composite_api_resolver_get(instance->api_resolver);
const NfcSupportedCardsPlugin* plugin = nfc_supported_cards_get_plugin( const NfcSupportedCardsPlugin* plugin = nfc_supported_cards_get_plugin(
instance->load_context, plugin_cache->path, api_interface); instance->load_context, furi_string_get_cstr(plugin_cache->name), api_interface);
if(plugin == NULL) continue; if(plugin == NULL) continue;
if(plugin->parse) { if(plugin->parse) {