M5Unit-NFC 0.0.3 git rev:59f5362
Loading...
Searching...
No Matches
m5::nfc::NFCLayerV Class Reference

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

#include <nfc_layer_v.hpp>

Inheritance diagram for m5::nfc::NFCLayerV:
m5::nfc::NFCLayerInterface

Public Member Functions

 NFCLayerV (m5::unit::UnitST25R3916 &u)
 
 NFCLayerV (m5::unit::CapST25R3916 &u)
 
virtual uint16_t maximum_fifo_depth () const override
 Maximum FIFO depth.
 
bool isActive (const m5::nfc::v::PICC &picc) const
 Is the specified PICC currently active?
 
const m5::nfc::v::PICCactivatedPICC () const
 Retrieve the currently activated PICC.
 
m5::nfc::v::ModulationMode modulationMode () const
 
void setModulationMode (const m5::nfc::v::ModulationMode mode)
 
Detection and activation
bool detect (m5::nfc::v::PICC &picc, const uint32_t timeout_ms=50U)
 Detect single ready PICC.
 
bool detect (std::vector< m5::nfc::v::PICC > &piccs, const uint32_t timeout_ms=1000U)
 Detect ready PICCs.
 
bool activate (const m5::nfc::v::PICC &picc)
 Activate a specific PICC.
 
bool reactivate (const m5::nfc::v::PICC &picc)
 Detect single ready PICC.
 
bool reactivate ()
 Detect single ready PICC.
 
For activated PICC
bool deactivate ()
 Send Reset to ready to the currently selected PICC (deactivate)
 
bool readBlock (uint8_t rx[32], const uint16_t block)
 Read single block.
 
bool writeBlock (const uint16_t block, const uint8_t *tx, const uint8_t tx_len)
 Write single block.
 
virtual bool read (uint8_t *rx, uint16_t &rx_len, const uint16_t sblock) override
 Read any bytes from user area.
 
virtual bool write (const uint16_t sblock, const uint8_t *tx, const uint16_t tx_len) override
 Write any bytes to user area.
 
bool dump ()
 Dump all blocks.
 
bool dump (const uint16_t block)
 Dump 1 block.
 
For NDEF
Note
For activated PICC
bool ndefIsValidFormat (bool &valid)
 Is the PICC data in NDEF format?
 
bool ndefReadCapabilityContainer (m5::nfc::ndef::type5::CapabilityContainer &cc)
 Read Type5 Capability Container.
 
bool ndefWriteCapabilityContainer (const m5::nfc::ndef::type5::CapabilityContainer &cc)
 Write Type5 Capability Container.
 
bool ndefRead (m5::nfc::ndef::TLV &msg)
 Read NDEF Message TLV.
 
bool ndefWrite (const m5::nfc::ndef::TLV &msg)
 Write NDEF message.
 
- 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 m5::nfc::isodep::IsoDEPisoDEP ()
 ISO-DEP interface (nullptr if not supported)
 
virtual bool transceive (uint8_t *rx, uint16_t &rx_len, const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms)
 Transceive (RF command)
 
virtual bool transmit (const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms)
 Transmit only.
 
virtual bool receive (uint8_t *rx, uint16_t &rx_len, const uint32_t timeout_ms)
 Receive only.
 
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 dump_all ()
 
bool dump_block (const uint16_t block)
 
bool detect_single (m5::nfc::v::PICC &picc)
 
bool get_system_information (m5::nfc::v::PICC &picc)
 
bool get_system_information_ext (m5::nfc::v::PICC &picc)
 
bool read_block_ext (uint8_t rx[32], const m5::nfc::v::PICC &picc, const uint16_t block)
 
bool write_block_ext (const m5::nfc::v::PICC &picc, const uint16_t block, const uint8_t *tx, const uint8_t tx_len)
 
bool reset_to_ready (const m5::nfc::v::PICC *picc)
 
bool stay_quiet (const m5::nfc::v::PICC &picc)
 
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::v::PICC _activePICC {}
 

Detailed Description

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

Member Function Documentation

◆ activate()

bool m5::nfc::NFCLayerV::activate ( const m5::nfc::v::PICC & picc)

Activate a specific PICC.

Parameters
piccPICC
Returns
True if successful
Precondition
PICC is READY state
Postcondition
PICC transitions: READY/QUIET -> SELECTED on a successful response

◆ activatedPICC()

const m5::nfc::v::PICC & m5::nfc::NFCLayerV::activatedPICC ( ) const
inline

Retrieve the currently activated PICC.

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

◆ deactivate()

bool m5::nfc::NFCLayerV::deactivate ( )

Send Reset to ready to the currently selected PICC (deactivate)

Returns
True if successful
Precondition
A PICC is in the SELECTED state
Postcondition
PICC transitions: SELECTED -> READY on a successful response

◆ detect() [1/2]

bool m5::nfc::NFCLayerV::detect ( m5::nfc::v::PICC & picc,
const uint32_t timeout_ms = 50U )

Detect single ready PICC.

Parameters
[out]piccDetected PICC
timeout_msPolling time budget in milliseconds
Returns
True if detected
Note
The detected PICC is typically put into QUIET during enumeration to allow discovering others

◆ detect() [2/2]

bool m5::nfc::NFCLayerV::detect ( std::vector< m5::nfc::v::PICC > & piccs,
const uint32_t timeout_ms = 1000U )

Detect ready PICCs.

Parameters
[out]piccsDetected PICC PICCs
timeout_msPolling time budget in milliseconds
Returns
True if detected
Note
The detected PICC is typically put into QUIET during enumeration to allow discovering others

◆ dump() [1/2]

bool m5::nfc::NFCLayerV::dump ( )

Dump all blocks.

Returns
True if successful

◆ dump() [2/2]

bool m5::nfc::NFCLayerV::dump ( const uint16_t block)

Dump 1 block.

Parameters
blockBlock address
Returns
True if successful

◆ first_user_block()

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

First user block.

Implements m5::nfc::NFCLayerInterface.

◆ isActive()

bool m5::nfc::NFCLayerV::isActive ( const m5::nfc::v::PICC & picc) const
inline

Is the specified PICC currently active?

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

◆ last_user_block()

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

Last user block.

Implements m5::nfc::NFCLayerInterface.

◆ maximum_fifo_depth()

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

Maximum FIFO depth.

Implements m5::nfc::NFCLayerInterface.

◆ ndefIsValidFormat()

bool m5::nfc::NFCLayerV::ndefIsValidFormat ( bool & valid)

Is the PICC data in NDEF format?

Parameters
[out]validTrue if NDEF format
Returns
True if successful

◆ ndefRead()

bool m5::nfc::NFCLayerV::ndefRead ( m5::nfc::ndef::TLV & msg)

Read NDEF Message TLV.

Parameters
[out]msgMessage If it does not exist, a Null TLV is returned
Returns
True if successful
Note
If multiple messages of the same type exist, return the first one
Warning
Only PICC cards supporting NDEF are valid

◆ ndefReadCapabilityContainer()

bool m5::nfc::NFCLayerV::ndefReadCapabilityContainer ( m5::nfc::ndef::type5::CapabilityContainer & cc)

Read Type5 Capability Container.

Parameters
[out]ccCapability container
Returns
True if successful

◆ ndefWrite()

bool m5::nfc::NFCLayerV::ndefWrite ( const m5::nfc::ndef::TLV & msg)

Write NDEF message.

Parameters
msgMessage (NDEF Message)
Returns
True if successful
Note
Other existing tags will be preserved
Warning
Existing NDEF message TLVs will be overwritten
Only PICC cards supporting NDEF are valid

◆ ndefWriteCapabilityContainer()

bool m5::nfc::NFCLayerV::ndefWriteCapabilityContainer ( const m5::nfc::ndef::type5::CapabilityContainer & cc)

Write Type5 Capability Container.

Parameters
[in]ccCapability container
Returns
True if successful

◆ reactivate() [1/2]

bool m5::nfc::NFCLayerV::reactivate ( )
inline

Detect single ready PICC.

Parameters
[out]piccDetected PICC
timeout_msPolling time budget in milliseconds
Returns
True if detected
Note
The detected PICC is typically put into QUIET during enumeration to allow discovering others

◆ reactivate() [2/2]

bool m5::nfc::NFCLayerV::reactivate ( const m5::nfc::v::PICC & picc)

Detect single ready PICC.

Parameters
[out]piccDetected PICC
timeout_msPolling time budget in milliseconds
Returns
True if detected
Note
The detected PICC is typically put into QUIET during enumeration to allow discovering others

◆ read()

bool m5::nfc::NFCLayerV::read ( uint8_t * rx,
uint16_t & rx_len,
const uint16_t sblock )
overridevirtual

Read any bytes from user area.

Continue reading only the user area from the first block of the user area until rx_len is satisfied

Parameters
rxBuffer
[in/out]rx_len in:buffer size, out:actual read size
sblockReading start block
Returns
True if successful

Implements m5::nfc::NFCLayerInterface.

◆ readBlock()

bool m5::nfc::NFCLayerV::readBlock ( uint8_t rx[32],
const uint16_t block )

Read single block.

Parameters
[out]rxOutput buffer (At least the size of one PICC block)
blockBlock address
Returns
True if successful
Warning
The required size varies depending on the PICC
The maximum rx size is 32

◆ unit_size_read()

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

Unit size for read.

Implements m5::nfc::NFCLayerInterface.

◆ unit_size_write()

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

Unit size for write.

Implements m5::nfc::NFCLayerInterface.

◆ user_area_size()

virtual uint16_t m5::nfc::NFCLayerV::user_area_size ( ) const
inlineprotectedvirtual

User area size (bytes)

Implements m5::nfc::NFCLayerInterface.

◆ write()

bool m5::nfc::NFCLayerV::write ( const uint16_t sblock,
const uint8_t * tx,
const uint16_t tx_len )
overridevirtual

Write any bytes to user area.

Continue writing only the user area from the first block of the user area until tx_len is satisfied

Parameters
sblockWriting start block
txBuffer
tx_lenbuffer size
Returns
True if successful
Warning
The write unit is the size of one block in PICC

Implements m5::nfc::NFCLayerInterface.

◆ writeBlock()

bool m5::nfc::NFCLayerV::writeBlock ( const uint16_t block,
const uint8_t * tx,
const uint8_t tx_len )

Write single block.

Parameters
blockBlock address
txbuffer
tx_lenbuffer size
Warning
If the tx_len is less than the size of one PICC block, the remaining space is filled with 0x00
If the tx_len is larger than the size of one PICC block, only the first 4 bytes will be written