M5Unit-NFC 0.1.2 git rev:63c4caa
Loading...
Searching...
No Matches
m5::nfc::EmulationLayerF Class Reference

Common interface layer for each chip of the NFC-F emulation. More...

#include <emulation_layer_f.hpp>

Public Types

enum class  State { None , Off , Communicated , Selected }
 Emulation state for NFC-F.
 

Public Member Functions

 EmulationLayerF (m5::unit::UnitST25R3916 &u)
 Construct with UnitST25R3916 (I2C)
 
 EmulationLayerF (m5::unit::CapST25R3916 &u)
 Construct with CapST25R3916 (SPI)
 
State state () const
 Gets the current emulation state.
 
const m5::nfc::f::PICC & emulatePICC () const
 Gets the emulated PICC information.
 
uint32_t expiredTime () const
 Gets the expiration time (ms)
 
void setExpiredTime (const uint32_t ms)
 Sets the expiration time (ms)
 
bool begin (const m5::nfc::f::PICC &picc, uint8_t *ptr, const uint32_t size)
 Begin NFC-F emulation.
 
bool end ()
 End NFC-F emulation.
 
void update ()
 Update emulation state machine.
 
virtual State receive_callback (const State s, const uint8_t *rx, const uint32_t rx_len)
 Handles a command received from the reader.
 

Protected Member Functions

void update_expired ()
 
bool transmit (const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms)
 

Protected Attributes

uint8_t * _memory {}
 
uint32_t _memory_size {}
 

Detailed Description

Common interface layer for each chip of the NFC-F emulation.

Note
The chip emulates one technology at a time, so this cannot run alongside EmulationLayerA. The unit must be configured for NFC-F emulation before begin().

Member Function Documentation

◆ receive_callback()

EmulationLayerF::State m5::nfc::EmulationLayerF::receive_callback ( const State s,
const uint8_t * rx,
const uint32_t rx_len )
virtual

Handles a command received from the reader.

Parameters
sCurrent state
rxReceived frame (without CRC)
rx_lenReceived length
Returns
State to move to. Returning s keeps the current state
Note
Override this to answer commands that the library does not handle, and call EmulationLayerF::receive_callback for the rest. Answer with transmit()

◆ setExpiredTime()

void m5::nfc::EmulationLayerF::setExpiredTime ( const uint32_t ms)
inline

Sets the expiration time (ms)

Parameters
msHow long a state may last before the emulation returns to State::Off. Zero turns this off
Note
A reader that leaves in the middle of a session leaves the emulation waiting in that state, and nothing on the RF side tells it to stop. Going back to Off lets the next reader find it again. State::Off itself never expires
The time is measured from the last RF traffic, so a session that keeps talking is not cut off however long it runs