#include "nfc_supported_cards.h"
#include "../plugins/nfc_supported_card_plugin.h"
#include <flipper_application/flipper_application.h>
#include <flipper_application/plugins/plugin_manager.h>
#include <loader/firmware_api/firmware_api.h>
#include <furi.h>
#define TAG "NfcSupportedCards"
#define NFC_SUPPORTED_CARDS_PLUGINS_PATH EXT_PATH("nfc/plugins")
typedef enum {
NfcSupportCardsStatusIdle,
NfcSupportCardsStatusLoadSuccess,
NfcSupportCardsStatusLoadFailed,
} NfcSupportCardsStatus;
struct NfcSupportedCards {
PluginManager* manager;
uint32_t plugin_cnt;
NfcSupportCardsStatus status;
};
NfcSupportedCards* nfc_supported_cards_alloc() {
NfcSupportedCards* instance = malloc(sizeof(NfcSupportedCards));
instance->manager = plugin_manager_alloc(
NFC_SUPPORTED_CARD_PLUGIN_APP_ID,
NFC_SUPPORTED_CARD_PLUGIN_API_VERSION,
firmware_api_interface);
if(plugin_manager_load_all(instance->manager, NFC_SUPPORTED_CARDS_PLUGINS_PATH) !=
PluginManagerErrorNone) {
FURI_LOG_W(TAG, "Failed to load all libs");
instance->status = NfcSupportCardsStatusLoadFailed;
} else {
instance->plugin_cnt = plugin_manager_get_count(instance->manager);
instance->status = NfcSupportCardsStatusLoadSuccess;
FURI_LOG_D(TAG, "Loaded %ld parsers", instance->plugin_cnt);
}
return instance;
}
void nfc_supported_cards_free(NfcSupportedCards* instance) {
furi_assert(instance);
plugin_manager_free(instance->manager);
free(instance);
}
//FIXME: Make it compile
// bool nfc_supported_cards_read(
// NfcSupportedCards* instance,
// NfcDevProtocol protocol,
// void* poller,
// void* data) {
// furi_assert(instance);
// furi_assert(poller);
// furi_assert(data);
//
// bool card_read = false;
// bool verified = false;
//
// do {
// if(instance->status != NfcSupportCardsStatusLoadSuccess) break;
//
// for(size_t i = 0; i < instance->plugin_cnt; i++) {
// const NfcSupportedCardsPlugin* plugin = plugin_manager_get_ep(instance->manager, i);
// if(plugin->protocol != protocol) continue;
// if(plugin->verify) {
// verified = plugin->verify(poller);
// }
// if(verified && (plugin->read)) {
// card_read = plugin->read(poller, data);
// }
// if(card_read) break;
// }
// } while(false);
//
// return card_read;
// }
//
// bool nfc_supported_cards_parse(
// NfcSupportedCards* instance,
// NfcDevProtocol protocol,
// void* data,
// FuriString* parsed_data) {
// furi_assert(instance);
// furi_assert(data);
// furi_assert(parsed_data);
//
// bool parsed = false;
//
// do {
// if(instance->status != NfcSupportCardsStatusLoadSuccess) break;
//
// for(size_t i = 0; i < instance->plugin_cnt; i++) {
// const NfcSupportedCardsPlugin* plugin = plugin_manager_get_ep(instance->manager, i);
// if(plugin->protocol != protocol) continue;
// if(plugin->parse) {
// parsed = plugin->parse(data, parsed_data);
// }
// if(parsed) break;
// }
// } while(false);
//
// return parsed;
// }
↑ V576 Incorrect format. Consider checking the fourth actual argument of the 'furi_log_print_format' function. The SIGNED argument of memsize type is expected.