nfc_device.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <storage/storage.h>
  5. #include <dialogs/dialogs.h>
  6. #include "./furi_hal_nfc.h"
  7. #include "protocols/mifare_ultralight.h"
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. #define NFC_DEV_NAME_MAX_LEN 22
  12. #define NFC_READER_DATA_MAX_SIZE 64
  13. #define NFC_DICT_KEY_BATCH_SIZE 10
  14. #define NFC_APP_FILENAME_PREFIX "NFC"
  15. #define NFC_APP_FILENAME_EXTENSION ".nfc"
  16. #define NFC_APP_SHADOW_EXTENSION ".shd"
  17. typedef void (*NfcLoadingCallback)(void* context, bool state);
  18. typedef enum {
  19. NfcDeviceProtocolUnknown,
  20. NfcDeviceProtocolEMV,
  21. NfcDeviceProtocolMifareUl,
  22. NfcDeviceProtocolMifareClassic,
  23. NfcDeviceProtocolMifareDesfire,
  24. NfcDeviceProtocolNfcV
  25. } NfcProtocol;
  26. typedef enum {
  27. NfcDeviceSaveFormatUid,
  28. NfcDeviceSaveFormatBankCard,
  29. NfcDeviceSaveFormatMifareUl,
  30. NfcDeviceSaveFormatMifareClassic,
  31. NfcDeviceSaveFormatMifareDesfire,
  32. NfcDeviceSaveFormatNfcV,
  33. } NfcDeviceSaveFormat;
  34. typedef struct {
  35. uint8_t data[NFC_READER_DATA_MAX_SIZE];
  36. uint16_t size;
  37. } NfcReaderRequestData;
  38. typedef enum {
  39. NfcReadModeAuto,
  40. NfcReadModeMfClassic,
  41. NfcReadModeMfUltralight,
  42. NfcReadModeMfDesfire,
  43. NfcReadModeEMV,
  44. NfcReadModeNFCA,
  45. } NfcReadMode;
  46. typedef struct {
  47. FurryHalNfcDevData nfc_data;
  48. NfcProtocol protocol;
  49. NfcReadMode read_mode;
  50. union {
  51. NfcReaderRequestData reader_data;
  52. MfUltralightAuth mf_ul_auth;
  53. };
  54. union {
  55. MfUltralightData mf_ul_data;
  56. };
  57. FuriString* parsed_data;
  58. } NfcDeviceData;
  59. typedef struct {
  60. Storage* storage;
  61. DialogsApp* dialogs;
  62. NfcDeviceData dev_data;
  63. char dev_name[NFC_DEV_NAME_MAX_LEN + 1];
  64. FuriString* load_path;
  65. FuriString* folder;
  66. NfcDeviceSaveFormat format;
  67. bool shadow_file_exist;
  68. NfcLoadingCallback loading_cb;
  69. void* loading_cb_ctx;
  70. } NfcDevice;
  71. NfcDevice* nfc_device_alloc();
  72. void nfc_device_free(NfcDevice* nfc_dev);
  73. void nfc_device_set_name(NfcDevice* dev, const char* name);
  74. bool nfc_device_save(NfcDevice* dev, const char* dev_name);
  75. bool nfc_device_save_shadow(NfcDevice* dev, const char* dev_name);
  76. bool nfc_device_load(NfcDevice* dev, const char* file_path, bool show_dialog);
  77. bool nfc_device_load_key_cache(NfcDevice* dev);
  78. void nfc_device_data_clear(NfcDeviceData* dev);
  79. void nfc_device_clear(NfcDevice* dev);
  80. bool nfc_device_delete(NfcDevice* dev, bool use_load_path);
  81. bool nfc_device_restore(NfcDevice* dev, bool use_load_path);
  82. void nfc_device_set_loading_callback(NfcDevice* dev, NfcLoadingCallback callback, void* context);
  83. #ifdef __cplusplus
  84. }
  85. #endif