nfc_worker.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #pragma once
  2. typedef enum {
  3. NfcDeviceNfca,
  4. NfcDeviceNfcb,
  5. NfcDeviceNfcf,
  6. NfcDeviceNfcv,
  7. } NfcDeviceType;
  8. typedef enum {
  9. NfcDeviceProtocolUnknown,
  10. NfcDeviceProtocolEMV,
  11. NfcDeviceProtocolMfUltralight,
  12. } NfcProtocol;
  13. typedef struct {
  14. uint8_t uid_len;
  15. uint8_t uid[10];
  16. uint8_t atqa[2];
  17. uint8_t sak;
  18. NfcDeviceType device;
  19. NfcProtocol protocol;
  20. } NfcDeviceData;
  21. typedef struct {
  22. NfcDeviceData nfc_data;
  23. char name[32];
  24. uint8_t number[8];
  25. } NfcEmvData;
  26. typedef struct {
  27. NfcDeviceData nfc_data;
  28. uint8_t man_block[12];
  29. uint8_t otp[4];
  30. } NfcMifareUlData;
  31. typedef struct {
  32. union {
  33. NfcDeviceData nfc_detect_data;
  34. NfcEmvData nfc_emv_data;
  35. NfcMifareUlData nfc_mifare_ul_data;
  36. };
  37. } NfcWorkerResult;
  38. typedef struct NfcWorker NfcWorker;
  39. typedef enum {
  40. // Init states
  41. NfcWorkerStateNone,
  42. NfcWorkerStateBroken,
  43. NfcWorkerStateReady,
  44. // Main worker states
  45. NfcWorkerStateDetect,
  46. NfcWorkerStateEmulate,
  47. NfcWorkerStateReadEMV,
  48. NfcWorkerStateEmulateEMV,
  49. NfcWorkerStateField,
  50. NfcWorkerStateReadMfUltralight,
  51. // Transition
  52. NfcWorkerStateStop,
  53. } NfcWorkerState;
  54. typedef void (*NfcWorkerCallback)(void* context);
  55. NfcWorker* nfc_worker_alloc();
  56. NfcWorkerState nfc_worker_get_state(NfcWorker* nfc_worker);
  57. ReturnCode nfc_worker_get_error(NfcWorker* nfc_worker);
  58. void nfc_worker_set_emulation_params(NfcWorker* nfc_worker, NfcDeviceData* data);
  59. void nfc_worker_free(NfcWorker* nfc_worker);
  60. void nfc_worker_start(
  61. NfcWorker* nfc_worker,
  62. NfcWorkerState state,
  63. NfcWorkerResult* result_dest,
  64. NfcWorkerCallback callback,
  65. void* context);
  66. void nfc_worker_stop(NfcWorker* nfc_worker);