unleashed-firmware/lib/nfc/nfc_device_i.c
gornekich d92b0a82cc
NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.

Starring:

- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer

Supporting roles:

- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance

Special thanks:

@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 12:08:09 +09:00

37 lines
1.1 KiB
C

#include "nfc_device_i.h"
#include "protocols/nfc_device_defs.h"
#include <furi/furi.h>
static NfcDeviceData*
nfc_device_search_base_protocol_data(const NfcDevice* instance, NfcProtocol protocol) {
NfcProtocol protocol_tmp = instance->protocol;
NfcDeviceData* dev_data_tmp = instance->protocol_data;
while(true) {
dev_data_tmp = nfc_devices[protocol_tmp]->get_base_data(dev_data_tmp);
protocol_tmp = nfc_protocol_get_parent(protocol_tmp);
if(protocol_tmp == protocol) {
break;
}
}
return dev_data_tmp;
}
NfcDeviceData* nfc_device_get_data_ptr(const NfcDevice* instance, NfcProtocol protocol) {
furi_assert(instance);
furi_assert(protocol < NfcProtocolNum);
NfcDeviceData* dev_data = NULL;
if(instance->protocol == protocol) {
dev_data = instance->protocol_data;
} else if(nfc_protocol_has_parent(instance->protocol, protocol)) {
dev_data = nfc_device_search_base_protocol_data(instance, protocol);
} else {
furi_crash("Incorrect protocol");
}
return dev_data;
}