16#ifndef M5_UNIT_NFC_NFC_LAYER_NFC_LAYER_B_HPP
17#define M5_UNIT_NFC_NFC_LAYER_NFC_LAYER_B_HPP
68 virtual bool transceive(uint8_t* rx, uint16_t& rx_len,
const uint8_t* tx,
const uint16_t tx_len,
69 const uint32_t timeout_ms)
override;
77 virtual bool transmit(
const uint8_t* tx,
const uint16_t tx_len,
const uint32_t timeout_ms)
override;
85 virtual bool receive(uint8_t* rx, uint16_t& rx_len,
const uint32_t timeout_ms)
override;
107 return _activePICC.
valid() && _activePICC == picc;
132 inline bool request(uint8_t* atqb, uint16_t& atqb_len,
const uint8_t afi = 0x00,
134 const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B)
136 return request_wakeup(atqb, atqb_len, afi, slots,
false, timeout_ms);
149 inline bool wakeup(uint8_t* atqb, uint16_t& atqb_len,
const uint8_t afi = 0x00,
151 const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B)
153 return request_wakeup(atqb, atqb_len, afi, slots,
true, timeout_ms);
166 const uint32_t req_timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B);
177 bool detect(std::vector<m5::nfc::b::PICC>& piccs,
const uint8_t afi = 0x00,
const uint8_t max_piccs = 4,
178 const uint32_t timeout_ms = 1000U,
const uint32_t req_timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B);
190 inline bool reactivate()
192 return reactivate(_activePICC);
206 bool hlt(
const uint8_t pupi[4],
const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_HLTB);
214 bool deselect(
const uint8_t pupi[4],
const uint8_t cid = 0xFF,
215 const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_DESELECT);
224 bool request_wakeup(uint8_t* atqb, uint16_t& atqb_len,
const uint8_t afi,
const m5::nfc::b::Require slots,
225 const bool wakeup,
const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B);
227 virtual bool read(uint8_t* rx, uint16_t& rx_len,
const uint16_t saddr)
override
231 virtual bool write(
const uint16_t saddr,
const uint8_t* tx,
const uint16_t tx_len)
override
262 std::unique_ptr<Adapter> _impl;
267struct NFCLayerB::Adapter {
268 virtual ~Adapter() =
default;
270 virtual uint16_t max_fifo_depth()
const = 0;
272 virtual bool transceive(uint8_t* rx, uint16_t& rx_len,
const uint8_t* tx,
const uint16_t tx_len,
273 const uint32_t timeout_ms) = 0;
274 virtual bool transmit(
const uint8_t* tx,
const uint16_t tx_len,
const uint32_t timeout_ms) = 0;
275 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:105
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 (NFC-B)
Definition nfc_layer_b.cpp:72
virtual uint16_t unit_size_read() const override
Unit size for read.
Definition nfc_layer_b.hpp:247
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:149
virtual bool receive(uint8_t *rx, uint16_t &rx_len, const uint32_t timeout_ms) override
Receive (NFC-B)
Definition nfc_layer_b.cpp:83
virtual uint16_t maximum_fifo_depth() const override
Maximum FIFO depth in bytes.
Definition nfc_layer_b.cpp:67
virtual uint16_t last_user_block() const override
Last user block.
Definition nfc_layer_b.hpp:239
virtual bool transmit(const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms) override
Transmit (NFC-B)
Definition nfc_layer_b.cpp:78
virtual bool read(uint8_t *rx, uint16_t &rx_len, const uint16_t saddr) override
Read NDEF (block)
Definition nfc_layer_b.hpp:227
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:231
const m5::nfc::b::PICC & activatedPICC() const
Retrieve the currently activated PICC.
Definition nfc_layer_b.hpp:114
bool select(m5::nfc::b::PICC &picc, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_ATTRIB)
Send ATTRIB to activate the PICC.
Definition nfc_layer_b.cpp:130
NFCLayerB(m5::unit::UnitWS1850S &u)
Constructor with UnitWS1850S (M5Unit-RFID)
bool hlt(const uint8_t pupi[4], const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_HLTB)
Halt (HLTB) the specified PICC.
Definition nfc_layer_b.cpp:174
bool deactivate()
Deactivate the currently active PICC.
Definition nfc_layer_b.cpp:213
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:88
virtual m5::nfc::isodep::IsoDEP * isoDEP() override
Get ISO-DEP context.
Definition nfc_layer_b.hpp:90
bool deselect(const uint8_t pupi[4], const uint8_t cid=0xFF, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_DESELECT)
Deselect (S(DESELECT)) the specified PICC.
Definition nfc_layer_b.cpp:190
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:132
virtual uint16_t user_area_size() const override
User area size (bytes)
Definition nfc_layer_b.hpp:243
virtual uint16_t unit_size_write() const override
Unit size for write.
Definition nfc_layer_b.hpp:251
virtual uint16_t first_user_block() const override
First user block.
Definition nfc_layer_b.hpp:235
Common interface for NFC layer.
Definition nfc_layer.hpp:26
ISO Data Exchange Protocol.
Definition isoDEP.hpp:240
NDEF operations layer.
Definition ndef_layer.hpp:35
ST25R3916 unit in CapCC1101 (SPI)
Definition unit_ST25R3916.hpp:2113
ST25R3916 Unit.
Definition unit_ST25R3916.hpp:39
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:129
bool valid() const
Valid?
Definition nfcb.hpp:148