16#ifndef M5_UNIT_NFC_NFC_LAYER_NFC_LAYER_F_HPP
17#define M5_UNIT_NFC_NFC_LAYER_NFC_LAYER_F_HPP
65 return _activePICC.
valid() && _activePICC == picc;
107 inline bool detect(std::vector<m5::nfc::f::PICC>& piccs,
108 m5::nfc::f::TimeSlot time_slot = m5::nfc::f::TimeSlot::Slot16,
const uint32_t timeout_ms = 500U)
110 return detect(piccs,
nullptr, 0, time_slot, timeout_ms);
122 inline bool detect(std::vector<m5::nfc::f::PICC>& piccs,
const uint16_t private_code,
123 m5::nfc::f::TimeSlot time_slot = m5::nfc::f::TimeSlot::Slot16,
const uint32_t timeout_ms = 500U)
125 return detect(piccs, &private_code, 1, time_slot, timeout_ms);
139 bool detect(std::vector<m5::nfc::f::PICC>& piccs,
const uint16_t* private_code,
const uint8_t pc_size,
140 m5::nfc::f::TimeSlot time_slot = m5::nfc::f::TimeSlot::Slot16,
const uint32_t timeout_ms = 500U);
177 bool requestService(uint16_t& key_version,
const uint16_t node_code);
186 bool requestService(uint16_t key_version[],
const uint16_t* node_code,
const uint8_t node_num);
196 return _activePICC.
valid() && request_response_impl(_activePICC, mode);
234 const uint16_t service_code = m5::nfc::f::service_random_read)
236 return read16(rx, &block, 1, service_code);
247 const uint16_t service_code = m5::nfc::f::service_random_read);
272 const uint16_t* service_code,
const uint8_t service_num)
274 return _activePICC.
valid() &&
275 read_without_encryption_impl(rx, rx_len, block_list, block_num, service_code, service_num, _activePICC);
330 _authenticated =
false;
390 virtual bool read(uint8_t* rx, uint16_t& rx_len,
const uint16_t saddr)
override;
391 virtual bool write(
const uint16_t saddr,
const uint8_t* tx,
const uint16_t tx_len)
override;
422 bool request_system_code_impl(
const m5::nfc::f::PICC& picc, uint16_t code_list[255], uint8_t& code_num);
423 bool read_without_encryption_impl(uint8_t* rx, uint16_t& rx_len,
const m5::nfc::f::block_t* block_list,
424 const uint8_t block_num,
const uint16_t* service_code,
const uint8_t service_num,
427 const uint8_t block_num,
const uint16_t* service_code,
const uint8_t service_num,
428 const uint8_t* tx,
const uint16_t tx_len);
430 bool dump_felica_lite();
431 bool dump_felica_lite_s();
434 bool internal_authenticate_lite_s(
const uint8_t ck[16],
const uint16_t ckv,
const uint8_t rc[16],
435 const bool include_wcnt =
false);
436 bool external_authenticate_lite_s(
const uint8_t ck[16],
const uint16_t ckv);
442 std::unique_ptr<Adapter> _impl;
452 bool _authenticated{};
457struct NFCLayerF::Adapter {
458 virtual ~Adapter() =
default;
460 virtual uint16_t max_fifo_depth()
const = 0;
461 virtual bool transceive(uint8_t* rx, uint16_t& rx_len,
const uint8_t* tx,
const uint16_t tx_len,
462 const uint32_t timeout_ms) = 0;
Common interface layer for each chip of the NFC-F reader.
Definition nfc_layer_f.hpp:37
bool read16(uint8_t rx[16], const m5::nfc::f::block_t block, const uint16_t service_code=m5::nfc::f::service_random_read)
Read the 1 block with service code.
Definition nfc_layer_f.hpp:233
bool ndefWrite(const m5::nfc::ndef::TLV &msg)
Write NDEF message TLV.
Definition nfc_layer_f.cpp:781
bool requestService(uint16_t &key_version, const uint16_t node_code)
Request service.
Definition nfc_layer_f.cpp:309
bool requestResponse(m5::nfc::f::standard::Mode &mode)
Request response.
Definition nfc_layer_f.hpp:194
bool read(uint8_t *rx, uint16_t &rx_len, const m5::nfc::f::block_t sblock)
Read any bytes from user area.
Definition nfc_layer_f.cpp:493
virtual uint16_t first_user_block() const override
First user block.
Definition nfc_layer_f.hpp:392
bool writeWithMAC16(const m5::nfc::f::block_t block, const uint8_t tx[16], const uint16_t tx_len)
Write the 1 block.
Definition nfc_layer_f.cpp:682
virtual uint16_t unit_size_read() const override
Unit size for read.
Definition nfc_layer_f.hpp:404
virtual uint8_t maximum_read_blocks() const override
Maximum read blocks for NFC-F.
Definition nfc_layer_f.hpp:412
bool detect(std::vector< m5::nfc::f::PICC > &piccs, m5::nfc::f::TimeSlot time_slot=m5::nfc::f::TimeSlot::Slot16, const uint32_t timeout_ms=500U)
Detect PICCs.
Definition nfc_layer_f.hpp:107
virtual uint16_t maximum_fifo_depth() const override
Maximum FIFO depth in bytes.
Definition nfc_layer_f.cpp:84
bool readWithMAC16(uint8_t rx[16], const m5::nfc::f::block_t block)
Read the 1 block.
Definition nfc_layer_f.cpp:544
bool dump()
Dump all blocks.
Definition nfc_layer_f.cpp:812
virtual uint16_t unit_size_write() const override
Unit size for write.
Definition nfc_layer_f.hpp:408
bool isActive(const m5::nfc::f::PICC &picc) const
Is the specified PICC currently active?
Definition nfc_layer_f.hpp:63
virtual uint16_t user_area_size() const override
User area size (bytes)
Definition nfc_layer_f.hpp:400
bool detect(std::vector< m5::nfc::f::PICC > &piccs, const uint16_t private_code, m5::nfc::f::TimeSlot time_slot=m5::nfc::f::TimeSlot::Slot16, const uint32_t timeout_ms=500U)
Detect PICCs matching the specified system code.
Definition nfc_layer_f.hpp:122
bool reactivate(const m5::nfc::f::PICC &picc)
Activate a specific PICC.
Definition nfc_layer_f.hpp:155
virtual uint16_t last_user_block() const override
Last user block.
Definition nfc_layer_f.hpp:396
bool detect(m5::nfc::f::PICC &picc, const uint32_t timeout_ms=100U)
Detect single PICC.
Definition nfc_layer_f.cpp:123
bool deactivate()
Deactivate PICC.
Definition nfc_layer_f.cpp:302
bool clearSPAD()
Clear SPAD_0 - 13.
Definition nfc_layer_f.cpp:737
void clearAuthenticate()
Clear authentication state.
Definition nfc_layer_f.hpp:328
bool ndefRead(m5::nfc::ndef::TLV &msg)
Read NDEF Message TLV.
Definition nfc_layer_f.cpp:769
bool externalAuthenticate(const uint8_t ck[16], const uint16_t ckv)
External authentication.
Definition nfc_layer_f.cpp:751
bool write(const m5::nfc::f::block_t sblock, const uint8_t *tx, const uint16_t tx_len)
Write any bytes to user area.
Definition nfc_layer_f.cpp:616
virtual uint8_t maximum_write_blocks() const override
Maximum write blocks for NFC-F.
Definition nfc_layer_f.hpp:416
bool activate(const m5::nfc::f::PICC &picc)
Activate a specific PICC.
Definition nfc_layer_f.cpp:292
bool writeSupportNDEF(const bool enabled)
Write changes for NDEF Support.
Definition nfc_layer_f.cpp:787
bool ndefIsValidFormat(bool &valid)
Is the PICC data in NDEF format?
Definition nfc_layer_f.cpp:763
bool internalAuthenticate(const uint8_t ck[16], const uint16_t ckv, const uint8_t rc[16])
Internal authentication.
Definition nfc_layer_f.cpp:743
const m5::nfc::f::PICC & activatedPICC() const
Retrieve the currently activated PICC.
Definition nfc_layer_f.hpp:72
bool polling(m5::nfc::f::PICC &picc, const uint16_t system_code, const m5::nfc::f::RequestCode request_code, const m5::nfc::f::TimeSlot time_slot)
Polling.
Definition nfc_layer_f.cpp:89
bool read(uint8_t *rx, uint16_t &rx_len, const m5::nfc::f::block_t *block_list, const uint8_t block_num, const uint16_t *service_code, const uint8_t service_num)
Read the specified block list and service codes.
Definition nfc_layer_f.hpp:271
bool requestSystemCode(uint16_t code_list[255], uint8_t &code_num)
Request system code.
Definition nfc_layer_f.cpp:395
bool write16(const m5::nfc::f::block_t block, const uint8_t tx[16], const uint16_t tx_len)
Write the 1 block.
Definition nfc_layer_f.cpp:606
Common interface for NFC layer.
Definition nfc_layer.hpp:26
NDEF operations layer.
Definition ndef_layer.hpp:35
NDEF TLV container.
Definition ndef_tlv.hpp:27
ST25R3916 unit in CapCC1101 (SPI)
Definition unit_ST25R3916.hpp:2113
ST25R3916 Unit.
Definition unit_ST25R3916.hpp:39
Top level namespace of M5Stack.
Common layer for NDEF related.
Common layer for NFC related units.
TimeSlot
Timeslot value for Polling.
Definition nfcf.hpp:111
Mode
Mode for Standard.
Definition nfcf.hpp:295
RequestCode
Request code for Polling.
Definition nfcf.hpp:101
PICC information for NFC-F.
Definition nfcf.hpp:490
uint16_t userAreaSize() const
Total user area size.
Definition nfcf.hpp:515
uint16_t lastUserBlock() const
Gets the last user block.
Definition nfcf.hpp:531
uint8_t maximumWriteBlocks() const
Maximum number of blocks that can be write simultaneously.
Definition nfcf.hpp:557
uint16_t firstUserBlock() const
Gets the first user block.
Definition nfcf.hpp:523
uint8_t maximumReadBlocks() const
Maximum number of blocks that can be read simultaneously.
Definition nfcf.hpp:549
bool valid() const
Valid for detection?
Definition nfcf.cpp:310
Block list element.
Definition nfcf.hpp:155