16#ifndef M5_UNIT_NFC_NFC_LAYER_NFC_LAYER_B_HPP
17#define M5_UNIT_NFC_NFC_LAYER_NFC_LAYER_B_HPP
44 explicit NFCLayerB(m5::unit::UnitWS1850S& u);
46 virtual bool transceive(uint8_t* rx, uint16_t& rx_len,
const uint8_t* tx,
const uint16_t tx_len,
47 const uint32_t timeout_ms)
override;
48 virtual bool transmit(
const uint8_t* tx,
const uint16_t tx_len,
const uint32_t timeout_ms)
override;
49 virtual bool receive(uint8_t* rx, uint16_t& rx_len,
const uint32_t timeout_ms)
override;
63 return _activePICC.
valid() && _activePICC == picc;
87 inline bool request(uint8_t* atqb, uint16_t& atqb_len,
const uint8_t afi = 0x00,
89 const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B)
91 return request_wakeup(atqb, atqb_len, afi, slots,
false, timeout_ms);
103 inline bool wakeup(uint8_t* atqb, uint16_t& atqb_len,
const uint8_t afi = 0x00,
105 const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B)
107 return request_wakeup(atqb, atqb_len, afi, slots,
true, timeout_ms);
119 const uint32_t req_timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B);
129 bool detect(std::vector<m5::nfc::b::PICC>& piccs,
const uint8_t afi = 0x00,
const uint8_t max_piccs = 4,
130 const uint32_t timeout_ms = 1000U,
const uint32_t req_timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B);
138 inline bool reactivate()
140 return reactivate(_activePICC);
148 bool hlt(
const uint8_t pupi[4],
const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_HLTB);
149 bool deselect(
const uint8_t pupi[4],
const uint8_t cid = 0xFF,
150 const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_DESELECT);
155 bool request_wakeup(uint8_t* atqb, uint16_t& atqb_len,
const uint8_t afi,
const m5::nfc::b::Require slots,
156 const bool wakeup,
const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B);
158 virtual bool read(uint8_t* rx, uint16_t& rx_len,
const uint16_t saddr)
override
162 virtual bool write(
const uint16_t saddr,
const uint8_t* tx,
const uint16_t tx_len)
override
193 std::unique_ptr<Adapter> _impl;
198struct NFCLayerB::Adapter {
199 virtual ~Adapter() =
default;
201 virtual uint16_t max_fifo_depth()
const = 0;
203 virtual bool transceive(uint8_t* rx, uint16_t& rx_len,
const uint8_t* tx,
const uint16_t tx_len,
204 const uint32_t timeout_ms) = 0;
205 virtual bool transmit(
const uint8_t* tx,
const uint16_t tx_len,
const uint32_t timeout_ms) = 0;
206 virtual bool receive(uint8_t* rx, uint16_t& rx_len,
const uint32_t timeout_ms) = 0;
Common interface layer for each chip of the NFC-B reader.
Definition nfc_layer_b.hpp:39
bool isActive(const m5::nfc::b::PICC &picc) const
Is the specified PICC currently active?
Definition nfc_layer_b.hpp:61
virtual bool transceive(uint8_t *rx, uint16_t &rx_len, const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms) override
Transceive (RF command)
Definition nfc_layer_b.cpp:70
virtual uint16_t unit_size_read() const override
Unit size for read.
Definition nfc_layer_b.hpp:178
bool wakeup(uint8_t *atqb, uint16_t &atqb_len, const uint8_t afi=0x00, const m5::nfc::b::Require slots=m5::nfc::b::Require::Slot1, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_REQ_WUP_B)
Send WUPB to wake a PICC from IDLE or HALT.
Definition nfc_layer_b.hpp:103
virtual bool receive(uint8_t *rx, uint16_t &rx_len, const uint32_t timeout_ms) override
Receive only.
Definition nfc_layer_b.cpp:81
virtual uint16_t maximum_fifo_depth() const override
Maximum FIFO depth.
Definition nfc_layer_b.cpp:65
virtual uint16_t last_user_block() const override
Last user block.
Definition nfc_layer_b.hpp:170
virtual bool transmit(const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms) override
Transmit only.
Definition nfc_layer_b.cpp:76
virtual bool read(uint8_t *rx, uint16_t &rx_len, const uint16_t saddr) override
Read NDEF (block)
Definition nfc_layer_b.hpp:158
virtual bool write(const uint16_t saddr, const uint8_t *tx, const uint16_t tx_len) override
Write NDEF (block)
Definition nfc_layer_b.hpp:162
const m5::nfc::b::PICC & activatedPICC() const
Retrieve the currently activated PICC.
Definition nfc_layer_b.hpp:70
virtual uint16_t user_area_size() const
User area size (bytes)
Definition nfc_layer_b.hpp:174
bool select(m5::nfc::b::PICC &picc, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_ATTRIB)
Send REQB to discover a PICC in IDLE.
Definition nfc_layer_b.cpp:128
bool detect(m5::nfc::b::PICC &picc, const uint8_t afi=0x00, const uint32_t timeout_ms=50U, const uint32_t req_timeout_ms=m5::nfc::b::TIMEOUT_REQ_WUP_B)
Detect single idle PICC.
Definition nfc_layer_b.cpp:86
virtual m5::nfc::isodep::IsoDEP * isoDEP() override
ISO-DEP interface (nullptr if not supported)
Definition nfc_layer_b.hpp:50
bool request(uint8_t *atqb, uint16_t &atqb_len, const uint8_t afi=0x00, const m5::nfc::b::Require slots=m5::nfc::b::Require::Slot1, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_REQ_WUP_B)
Send REQB to discover a PICC in IDLE.
Definition nfc_layer_b.hpp:87
virtual uint16_t unit_size_write() const override
Unit size for write.
Definition nfc_layer_b.hpp:182
virtual uint16_t first_user_block() const override
First user block.
Definition nfc_layer_b.hpp:166
Common interface for NFC layer.
Definition nfc_layer.hpp:26
ISO Data Exchange Protocol.
Definition isoDEP.hpp:190
NDEF operations layer.
Definition ndef_layer.hpp:35
ST25R3916 unit in CapCC1101 (SPI)
Definition unit_ST25R3916.hpp:2062
ST25R3916 Unit.
Definition unit_ST25R3916.hpp:38
ISO Data Exchange Protocol.
Top level namespace of M5stack.
Common layer for NDEF related.
Common layer for NFC related units.
Require
Number of slots required in the request/wakeup.
Definition nfcb.hpp:39
PICC for NFC-B.
Definition nfcb.hpp:99
bool valid() const
Valid?
Definition nfcb.hpp:115