M5Unit-NFC 0.1.0 git rev:93745b5
Loading...
Searching...
No Matches
m5::nfc::NFCLayerB Class Reference

Common interface layer for each chip of the NFC-B reader. More...

#include <nfc_layer_b.hpp>

Inheritance diagram for m5::nfc::NFCLayerB:
m5::nfc::NFCLayerInterface

Public Member Functions

 NFCLayerB (m5::unit::UnitST25R3916 &u)
 Constructor with UnitST25R3916.
 
 NFCLayerB (m5::unit::CapST25R3916 &u)
 Constructor with CapST25R3916 (SPI variant)
 
 NFCLayerB (m5::unit::UnitWS1850S &u)
 Constructor with UnitWS1850S (M5Unit-RFID)
 
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)
 
virtual bool transmit (const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms) override
 Transmit (NFC-B)
 
virtual bool receive (uint8_t *rx, uint16_t &rx_len, const uint32_t timeout_ms) override
 Receive (NFC-B)
 
virtual m5::nfc::isodep::IsoDEPisoDEP () override
 Get ISO-DEP context.
 
virtual uint16_t maximum_fifo_depth () const override
 Maximum FIFO depth in bytes.
 
bool isActive (const m5::nfc::b::PICC &picc) const
 Is the specified PICC currently active?
 
const m5::nfc::b::PICCactivatedPICC () const
 Retrieve the currently activated PICC.
 
Detection and activation
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.
 
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.
 
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.
 
bool detect (std::vector< m5::nfc::b::PICC > &piccs, const uint8_t afi=0x00, const uint8_t max_piccs=4, const uint32_t timeout_ms=1000U, const uint32_t req_timeout_ms=m5::nfc::b::TIMEOUT_REQ_WUP_B)
 Detect idle PICCs.
 
bool select (m5::nfc::b::PICC &picc, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_ATTRIB)
 Send ATTRIB to activate the PICC.
 
For activated PICC
bool hlt (const uint8_t pupi[4], const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_HLTB)
 Halt (HLTB) the specified PICC.
 
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.
 
bool deactivate ()
 Deactivate the currently active PICC.
 
- Public Member Functions inherited from m5::nfc::NFCLayerInterface
virtual ~NFCLayerInterface ()=default
 Virtual destructor (required for polymorphic deletion)
 
virtual m5::nfc::NFCForumTag supportsNFCTag () const
 activePICC's NDEF type
 
virtual file_system_feature_t supportsFilesystem () const
 activePICC's File system
 
virtual uint8_t maximum_read_blocks () const
 Maximum read blocks for NFC-F.
 
virtual uint8_t maximum_write_blocks () const
 Maximum write blocks for NFC-F.
 

Protected Member Functions

bool request_wakeup (uint8_t *atqb, uint16_t &atqb_len, const uint8_t afi, const m5::nfc::b::Require slots, const bool wakeup, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_REQ_WUP_B)
 
virtual bool read (uint8_t *rx, uint16_t &rx_len, const uint16_t saddr) override
 Read NDEF (block)
 
virtual bool write (const uint16_t saddr, const uint8_t *tx, const uint16_t tx_len) override
 Write NDEF (block)
 
virtual uint16_t first_user_block () const override
 First user block.
 
virtual uint16_t last_user_block () const override
 Last user block.
 
virtual uint16_t user_area_size () const override
 User area size (bytes)
 
virtual uint16_t unit_size_read () const override
 Unit size for read.
 
virtual uint16_t unit_size_write () const override
 Unit size for write.
 

Protected Attributes

m5::nfc::b::PICC _activePICC {}
 
m5::nfc::ndef::NDEFLayer _ndef
 
m5::nfc::isodep::IsoDEP _isoDEP
 

Detailed Description

Common interface layer for each chip of the NFC-B reader.

Constructor & Destructor Documentation

◆ NFCLayerB() [1/3]

m5::nfc::NFCLayerB::NFCLayerB ( m5::unit::UnitST25R3916 & u)
explicit

Constructor with UnitST25R3916.

Parameters
uUnitST25R3916 instance

◆ NFCLayerB() [2/3]

m5::nfc::NFCLayerB::NFCLayerB ( m5::unit::CapST25R3916 & u)
explicit

Constructor with CapST25R3916 (SPI variant)

Parameters
uCapST25R3916 instance

◆ NFCLayerB() [3/3]

m5::nfc::NFCLayerB::NFCLayerB ( m5::unit::UnitWS1850S & u)
explicit

Constructor with UnitWS1850S (M5Unit-RFID)

Parameters
uUnitWS1850S instance

Member Function Documentation

◆ activatedPICC()

const m5::nfc::b::PICC & m5::nfc::NFCLayerB::activatedPICC ( ) const
inline

Retrieve the currently activated PICC.

Returns
Active PICC
Note
Returns an empty PICC if no PICC is selected (no ACTIVE state)

◆ deactivate()

bool m5::nfc::NFCLayerB::deactivate ( )

Deactivate the currently active PICC.

Returns
True if successful

◆ deselect()

bool m5::nfc::NFCLayerB::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.

Parameters
pupiPUPI (4 bytes)
cidCID (0xFF if not used)
timeout_msTimeout(ms)
Returns
True if successful

◆ detect() [1/2]

bool m5::nfc::NFCLayerB::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.

Parameters
[out]piccDetected PICC
afiApplication Family Identifier (0x00 all)
timeout_msPolling time budget in milliseconds
req_timeout_msTimeout for each REQB/WUPB request in milliseconds
Returns
True if detected
Note
The detected PICC is typically put into HALT during enumeration to allow discovering others

◆ detect() [2/2]

bool m5::nfc::NFCLayerB::detect ( std::vector< m5::nfc::b::PICC > & piccs,
const uint8_t afi = 0x00,
const uint8_t max_piccs = 4,
const uint32_t timeout_ms = 1000U,
const uint32_t req_timeout_ms = m5::nfc::b::TIMEOUT_REQ_WUP_B )

Detect idle PICCs.

Parameters
[out]piccsDetected PICCs (one per activated PICC candidate)
afiApplication Family Identifier (0x00 all)
max_piccHow many to detect
timeout_msPolling time budget in milliseconds
req_timeout_msTimeout for each REQB/WUPB request in milliseconds
Returns
True if detected
Note
The detected PICC is typically put into HALT during enumeration to allow discovering others

◆ first_user_block()

virtual uint16_t m5::nfc::NFCLayerB::first_user_block ( ) const
inlineoverrideprotectedvirtual

First user block.

Implements m5::nfc::NFCLayerInterface.

◆ hlt()

bool m5::nfc::NFCLayerB::hlt ( const uint8_t pupi[4],
const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_HLTB )

Halt (HLTB) the specified PICC.

Parameters
pupiPUPI (4 bytes)
timeout_msTimeout(ms)
Returns
True if successful

◆ isActive()

bool m5::nfc::NFCLayerB::isActive ( const m5::nfc::b::PICC & picc) const
inline

Is the specified PICC currently active?

Parameters
piccPICC to check
Returns
True if this PICC is the one currently selected (ACTIVE state)

◆ isoDEP()

virtual m5::nfc::isodep::IsoDEP * m5::nfc::NFCLayerB::isoDEP ( )
inlineoverridevirtual

Get ISO-DEP context.

Returns
Pointer to ISO-DEP context

Reimplemented from m5::nfc::NFCLayerInterface.

◆ last_user_block()

virtual uint16_t m5::nfc::NFCLayerB::last_user_block ( ) const
inlineoverrideprotectedvirtual

Last user block.

Implements m5::nfc::NFCLayerInterface.

◆ maximum_fifo_depth()

uint16_t m5::nfc::NFCLayerB::maximum_fifo_depth ( ) const
overridevirtual

Maximum FIFO depth in bytes.

Returns
Maximum FIFO depth in bytes

Implements m5::nfc::NFCLayerInterface.

◆ read()

virtual bool m5::nfc::NFCLayerB::read ( uint8_t * rx,
uint16_t & rx_len,
const uint16_t saddr )
inlineoverrideprotectedvirtual

Read NDEF (block)

Implements m5::nfc::NFCLayerInterface.

◆ receive()

bool m5::nfc::NFCLayerB::receive ( uint8_t * rx,
uint16_t & rx_len,
const uint32_t timeout_ms )
overridevirtual

Receive (NFC-B)

Parameters
[out]rxReceive buffer
[in,out]rx_lenIn: capacity of rx, Out: received length
timeout_msTimeout in milliseconds
Returns
True if successful

Reimplemented from m5::nfc::NFCLayerInterface.

◆ request()

bool m5::nfc::NFCLayerB::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 )
inline

Send REQB to discover a PICC in IDLE.

Parameters
[out]atqbATQB received from PICC (at atqb_len)
[in/out]atqb_len in:atqb length out:actual received length
afiApplication Family Identifier (0x00 all)
slotsNumber of slots required
timeout_msTimeout in milliseconds
Returns
True if successful
Note
The ATQB per one of the PICC is 11 bytes
Postcondition
PICC transitions: IDLE -> READY on successful response

◆ select()

bool m5::nfc::NFCLayerB::select ( m5::nfc::b::PICC & picc,
const uint32_t timeout_ms = m5::nfc::b::TIMEOUT_ATTRIB )

Send ATTRIB to activate the PICC.

Parameters
piccPICC to activate
timeout_msTimeout(ms)
Returns
True if successful

◆ transceive()

bool m5::nfc::NFCLayerB::transceive ( uint8_t * rx,
uint16_t & rx_len,
const uint8_t * tx,
const uint16_t tx_len,
const uint32_t timeout_ms )
overridevirtual

Transceive (NFC-B)

Parameters
[out]rxReceive buffer
[in,out]rx_lenIn: capacity of rx, Out: received length
txTransmit buffer
tx_lenTransmit length
timeout_msTimeout in milliseconds
Returns
True if successful

Reimplemented from m5::nfc::NFCLayerInterface.

◆ transmit()

bool m5::nfc::NFCLayerB::transmit ( const uint8_t * tx,
const uint16_t tx_len,
const uint32_t timeout_ms )
overridevirtual

Transmit (NFC-B)

Parameters
txTransmit buffer
tx_lenTransmit length
timeout_msTimeout in milliseconds
Returns
True if successful

Reimplemented from m5::nfc::NFCLayerInterface.

◆ unit_size_read()

virtual uint16_t m5::nfc::NFCLayerB::unit_size_read ( ) const
inlineoverrideprotectedvirtual

Unit size for read.

Implements m5::nfc::NFCLayerInterface.

◆ unit_size_write()

virtual uint16_t m5::nfc::NFCLayerB::unit_size_write ( ) const
inlineoverrideprotectedvirtual

Unit size for write.

Implements m5::nfc::NFCLayerInterface.

◆ user_area_size()

virtual uint16_t m5::nfc::NFCLayerB::user_area_size ( ) const
inlineoverrideprotectedvirtual

User area size (bytes)

Implements m5::nfc::NFCLayerInterface.

◆ wakeup()

bool m5::nfc::NFCLayerB::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 )
inline

Send WUPB to wake a PICC from IDLE or HALT.

Parameters
[out]atqbATQB received from PICC (at least atqb_len)
[in/out]atqb_len in:atqb length out:actual received length
afiApplication Family Identifier (0x00 all)
slotsNumber of slots required
timeout_msTimeout in milliseconds
Returns
True if successful
Note
The ATQB per one of the PICC is 11 bytes
Postcondition
PICC transitions: IDLE/HALT -> READY on successful response

◆ write()

virtual bool m5::nfc::NFCLayerB::write ( const uint16_t saddr,
const uint8_t * tx,
const uint16_t tx_len )
inlineoverrideprotectedvirtual

Write NDEF (block)

Implements m5::nfc::NFCLayerInterface.