furi_hal_nfc.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * @file furi_hal_nfc.h
  3. * NFC HAL API
  4. */
  5. #pragma once
  6. #include <rfal_nfc.h>
  7. #include <st_errno.h>
  8. #include <stdbool.h>
  9. #include <stdint.h>
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. #define FURI_HAL_NFC_UID_MAX_LEN 10
  14. #define FURI_HAL_NFC_TXRX_DEFAULT \
  15. ((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_AUTO | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_REMV | \
  16. (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_OFF | (uint32_t)RFAL_TXRX_FLAGS_AGC_ON | \
  17. (uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_AUTO | \
  18. (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO)
  19. #define FURI_HAL_NFC_TXRX_RAW \
  20. ((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_REMV | \
  21. (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_OFF | (uint32_t)RFAL_TXRX_FLAGS_AGC_ON | \
  22. (uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_NONE | \
  23. (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO)
  24. typedef bool (*FuriHalNfcEmulateCallback)(
  25. uint8_t* buff_rx,
  26. uint16_t buff_rx_len,
  27. uint8_t* buff_tx,
  28. uint16_t* buff_tx_len,
  29. uint32_t* flags,
  30. void* context);
  31. /** Init nfc
  32. */
  33. void furi_hal_nfc_init();
  34. /** Check if nfc worker is busy
  35. *
  36. * @return true if busy
  37. */
  38. bool furi_hal_nfc_is_busy();
  39. /** NFC field on
  40. */
  41. void furi_hal_nfc_field_on();
  42. /** NFC field off
  43. */
  44. void furi_hal_nfc_field_off();
  45. /** NFC start sleep
  46. */
  47. void furi_hal_nfc_start_sleep();
  48. /** NFC stop sleep
  49. */
  50. void furi_hal_nfc_exit_sleep();
  51. /** NFC poll
  52. *
  53. * @param dev_list pointer to rfalNfcDevice buffer
  54. * @param dev_cnt pointer device count
  55. * @param timeout timeout in ms
  56. * @param deactivate deactivate flag
  57. *
  58. * @return true on success
  59. */
  60. bool furi_hal_nfc_detect(
  61. rfalNfcDevice** dev_list,
  62. uint8_t* dev_cnt,
  63. uint32_t timeout,
  64. bool deactivate);
  65. /** NFC listen
  66. *
  67. * @param uid pointer to uid buffer
  68. * @param uid_len uid length
  69. * @param atqa pointer to atqa
  70. * @param sak sak
  71. * @param activate_after_sak activate after sak flag
  72. * @param timeout timeout in ms
  73. *
  74. * @return true on success
  75. */
  76. bool furi_hal_nfc_listen(
  77. uint8_t* uid,
  78. uint8_t uid_len,
  79. uint8_t* atqa,
  80. uint8_t sak,
  81. bool activate_after_sak,
  82. uint32_t timeout);
  83. bool furi_hal_nfc_emulate_nfca(
  84. uint8_t* uid,
  85. uint8_t uid_len,
  86. uint8_t* atqa,
  87. uint8_t sak,
  88. FuriHalNfcEmulateCallback callback,
  89. void* context,
  90. uint32_t timeout);
  91. /** Get first command from reader after activation in emulation mode
  92. *
  93. * @param rx_buff pointer to receive buffer
  94. * @param rx_len receive buffer length
  95. *
  96. * @return true on success
  97. */
  98. bool furi_hal_nfc_get_first_frame(uint8_t** rx_buff, uint16_t** rx_len);
  99. /** NFC data exchange
  100. *
  101. * @param tx_buff transmit buffer
  102. * @param tx_len transmit buffer length
  103. * @param rx_buff receive buffer
  104. * @param rx_len receive buffer length
  105. * @param deactivate deactivate flag
  106. *
  107. * @return ST ReturnCode
  108. */
  109. ReturnCode furi_hal_nfc_data_exchange(
  110. uint8_t* tx_buff,
  111. uint16_t tx_len,
  112. uint8_t** rx_buff,
  113. uint16_t** rx_len,
  114. bool deactivate);
  115. ReturnCode furi_hal_nfc_raw_bitstream_exchange(
  116. uint8_t* tx_buff,
  117. uint16_t tx_bit_len,
  118. uint8_t** rx_buff,
  119. uint16_t** rx_bit_len,
  120. bool deactivate);
  121. /** NFC deactivate and start sleep
  122. */
  123. void furi_hal_nfc_deactivate();
  124. void furi_hal_nfc_stop();
  125. #ifdef __cplusplus
  126. }
  127. #endif