M5Unit-NFC 0.0.3 git rev:59f5362
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)
 
 NFCLayerB (m5::unit::CapST25R3916 &u)
 
 NFCLayerB (m5::unit::UnitWS1850S &u)
 
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)
 
virtual bool transmit (const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms) override
 Transmit only.
 
virtual bool receive (uint8_t *rx, uint16_t &rx_len, const uint32_t timeout_ms) override
 Receive only.
 
virtual m5::nfc::isodep::IsoDEPisoDEP () override
 ISO-DEP interface (nullptr if not supported)
 
virtual uint16_t maximum_fifo_depth () const override
 Maximum FIFO depth.
 
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 REQB to discover a PICC in IDLE.
 
For activated PICC
bool hlt (const uint8_t pupi[4], const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_HLTB)
 
bool deselect (const uint8_t pupi[4], const uint8_t cid=0xFF, const uint32_t timeout_ms=m5::nfc::b::TIMEOUT_DESELECT)
 
bool deactivate ()
 
- Public Member Functions inherited from m5::nfc::NFCLayerInterface
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
 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.

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)

◆ 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
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 PICC PICCs (one per activated PICC candidate)
afiApplication Family Identifier (0x00 all)
max_piccHow many to detect
timeout_msPolling time budget 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.

◆ 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

ISO-DEP interface (nullptr if not supported)

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.

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 only.

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]in:atqb length out:actual received length
afiApplication Family Identifier (0x00 all)
slotsNumber of slots required
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 REQB to discover a PICC in IDLE.

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

◆ 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 (RF command)

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 only.

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
inlineprotectedvirtual

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]in:atqb length out:actual received length
afiApplication Family Identifier (0x00 all)
slotsNumber of slots required
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.