M5Unit-RFID 0.0.2 git rev:1dc8f67
Loading...
Searching...
No Matches
m5::unit::UnitWS1850S Class Reference

Radio frequency identification unit. More...

#include <unit_WS1850S.hpp>

Inheritance diagram for m5::unit::UnitWS1850S:
m5::unit::UnitMFRC522

Classes

struct  config_t
 Settings for begin / configureNFCMode. More...
 

Public Member Functions

 UnitWS1850S (const uint8_t addr=DEFAULT_ADDRESS)
 Constructor.
 
virtual ~UnitWS1850S ()
 Destructor.
 
virtual bool begin () override
 Begin the unit.
 
Settings for begin / configureNFCMode
config_t config () const
 Gets the configuration.
 
void config (const config_t &cfg)
 Set the configuration.
 
NFC mode
m5::nfc::NFC NFCMode () const
 Gets the current operating mode.
 
bool configureNFCMode (const m5::nfc::NFC mode) override
 Configure NFC mode.
 
NFC-B (ISO/IEC 14443 Type B)
bool nfcbTransceive (uint8_t *rx, uint16_t &rx_len, const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms)
 Transceive an NFC-B frame.
 
bool readTypeBReg (uint8_t &value)
 Read the TypeBReg (PN512 Page 1, address 0x1E)
 
bool writeTypeBReg (const uint8_t value)
 Write the TypeBReg (PN512 Page 1, address 0x1E)
 
- Public Member Functions inherited from m5::unit::UnitMFRC522
 UnitMFRC522 (const uint8_t addr=DEFAULT_ADDRESS)
 Constructor.
 
virtual ~UnitMFRC522 ()
 Destructor.
 
virtual void update (const bool force=false) override
 Update internal state.
 
m5::nfc::NFC NFCMode () const
 Gets the current operating mode.
 
bool softReset (const bool blocking=true)
 Software reset.
 
bool selfTest ()
 Self test.
 
config_t config ()
 Gets the configuration.
 
void config (const config_t &cfg)
 Set the configuration.
 
bool readAntennaStatus (bool &status)
 Read the antenna status.
 
bool turnOnAntenna ()
 Turn on the antenna.
 
bool turnOffAntenna ()
 Turn off the antenna.
 
bool readReceiverGain (mfrc522::ReceiverGain &gain)
 Gets the receiver gain.
 
bool writeReceiverGain (const mfrc522::ReceiverGain gain)
 Write the receiver gain.
 
bool readGsN (uint8_t &value)
 Read the GsN register (N-driver conductance: CWGsN[7:4] / ModGsN[3:0])
 
bool writeGsN (const uint8_t value)
 Write the GsN register.
 
bool readCWGsP (uint8_t &value)
 Read the CWGsP register (P-driver conductance during no modulation)
 
bool writeCWGsP (const uint8_t value)
 Write the CWGsP register.
 
bool readModGsP (uint8_t &value)
 Read the ModGsP register (P-driver conductance during modulation)
 
bool writeModGsP (const uint8_t value)
 Write the ModGsP register.
 
bool readRxThreshold (uint8_t &value)
 Read the RxThreshold register.
 
bool writeRxThreshold (const uint8_t value)
 Write the RxThreshold register.
 
bool readTPrescaler (uint16_t &tprescale)
 Read the TPrescaler.
 
bool writeTPrescaler (const uint16_t tprescale)
 Write the TPrescaler.
 
bool calculateCRC (uint16_t &result, const uint8_t *buf, const uint8_t len)
 Calculate CRC by hardware.
 
bool calculateSoftwareCRC (uint16_t &result, const uint8_t *buf, const uint8_t len)
 Calculate CRC by software.
 
bool nfcaTransceive (uint8_t *rx, uint16_t &rx_len, const uint8_t *tx, const uint16_t tx_len, const uint32_t timeout_ms)
 Transceive.
 
bool request (uint16_t &atqa)
 Request for idle PICC.
 
bool wakeup (uint16_t &atqa)
 Wakeup for idle/halt PICC.
 
bool selectWithAnticollision (bool &completed, m5::nfc::a::PICC &picc, const uint8_t lv)
 Select PICC with anti-collision.
 
bool select (const m5::nfc::a::PICC &picc)
 Select specific PICC.
 
bool readBlock (uint8_t rx[16], const uint8_t block)
 Read the 1 block / 4 page (16 bytes)
 
bool writeBlock (const uint8_t block, const uint8_t tx[16])
 Write the 1 block.
 
bool hlt ()
 Hlt for PICC.
 
bool mifareClassicAuthenticateA (const m5::nfc::a::PICC &picc, const uint8_t block, const m5::nfc::a::mifare::classic::Key &key=m5::nfc::a::mifare::classic::DEFAULT_KEY)
 Authentication using keyA of the specified block.
 
bool mifareClassicAuthenticateB (const m5::nfc::a::PICC &picc, const uint8_t block, const m5::nfc::a::mifare::classic::Key &key=m5::nfc::a::mifare::classic::DEFAULT_KEY)
 Authentication using keyB of the specified block.
 
bool mifareClassicStopCrypto1 ()
 Exit from authenticated state for MIFARE classic.
 
bool mifareClassicValueBlock (const m5::nfc::a::Command cmd, const uint8_t block, const uint32_t arg=0)
 Operation for the value block.
 

Protected Member Functions

virtual bool self_test () override
 self test
 
bool configure_nfca ()
 Switch chip to NFC-A mode (default)
 
bool configure_nfcb ()
 Switch chip to NFC-B mode (PN512-compatible silicon only)
 
- Protected Member Functions inherited from m5::unit::UnitMFRC522
bool modify_bit_register8 (const uint8_t reg, const uint8_t set_mask, const uint8_t clear_mask)
 
bool set_bit_register8 (const uint8_t reg, const uint8_t bits)
 
bool clear_bit_register8 (const uint8_t reg, const uint8_t bits)
 
bool change_bit_register8 (const uint8_t reg, const uint8_t bits, const uint8_t mask)
 
bool read_register_with_align (const uint8_t reg, uint8_t *buf, const uint8_t len, const uint8_t align)
 
bool write_pcd_command (const mfrc522::Command cmd)
 
bool reset_baud_rates ()
 
bool flush_fifo_buffer ()
 
bool wait_comm_irq (const uint8_t irq, const uint32_t duration)
 
bool wait_div_irq (const uint8_t irq, const uint32_t duration)
 
bool transmit_command (const mfrc522::Command cmd, const uint8_t *buf, const uint8_t len, const uint8_t txLast=0, const uint8_t rxAlign=0)
 
bool transceive (uint8_t *rbuf, uint16_t &rlen, const uint8_t *buf, const uint16_t len, const uint32_t timeout_ms, uint8_t &validBits, const uint8_t rxAlign=0, const bool crc=false, uint8_t *err=nullptr)
 
bool picc_haltA ()
 
bool read_block (uint8_t *rbuf, uint8_t &rlen, const uint8_t addr)
 
bool write_block (const uint8_t block, const uint8_t *buf, const uint8_t len)
 
bool write_page (const uint8_t page, const uint8_t *buf, const uint8_t len)
 
bool request_wakeup (uint16_t &atqa, const bool request)
 
bool anti_collision (const uint8_t cascadeLevel, uint8_t *buf)
 
bool mifare_classic_authenticate (const m5::nfc::a::Command cmd, const m5::nfc::a::PICC &picc, const uint8_t block, const m5::nfc::a::mifare::classic::Key &key)
 
bool mifare_classic_transceive (const m5::nfc::a::Command cmd, const uint8_t block, const uint32_t timeout_ms)
 
bool mifare_classic_transceive (const uint8_t *buf, const uint8_t len, const uint32_t timeout_ms, const bool usingtimeout=false)
 
bool calculate_crc (uint16_t &result, const uint8_t *buf, const uint8_t len)
 

Protected Attributes

config_t _cfg {}
 
m5::nfc::NFC _mode {m5::nfc::NFC::A}
 
- Protected Attributes inherited from m5::unit::UnitMFRC522
config_t _cfg {}
 
uint16_t _tprescaler {}
 

Detailed Description

Radio frequency identification unit.

Functionally compatible with MFRC522. Supports NFC-A (always) and NFC-B (if PN512-compatible silicon).

Constructor & Destructor Documentation

◆ UnitWS1850S()

m5::unit::UnitWS1850S::UnitWS1850S ( const uint8_t addr = DEFAULT_ADDRESS)
inlineexplicit

Constructor.

Parameters
addrI2C address

Member Function Documentation

◆ begin()

bool m5::unit::UnitWS1850S::begin ( )
overridevirtual

Begin the unit.

Returns
True if successful

Reimplemented from m5::unit::UnitMFRC522.

◆ configureNFCMode()

bool m5::unit::UnitWS1850S::configureNFCMode ( const m5::nfc::NFC mode)
overridevirtual

Configure NFC mode.

Parameters
modeNFC::A or NFC::B
Returns
True if successful
Note
NFC::B requires PN512-compatible silicon. Antenna tuning values are taken from config_t.

Reimplemented from m5::unit::UnitMFRC522.

◆ nfcbTransceive()

bool m5::unit::UnitWS1850S::nfcbTransceive ( uint8_t * rx,
uint16_t & rx_len,
const uint8_t * tx,
const uint16_t tx_len,
const uint32_t timeout_ms )

Transceive an NFC-B frame.

Parameters
rxReceive buffer (returned with trailing 2-byte CRC_B intact)
[in,out]rx_lenin:Size of rx buffer out:Actual received length
txTransmit buffer (without CRC; CRC_B is appended internally)
tx_lenLength of tx
timeout_msTimeout in milliseconds
Returns
True if successful
Note
Software CRC_B is used for transmission. Both software and hardware CRC are also computed and compared in M5_LIB_LOGI for silicon compatibility diagnosis.

◆ NFCMode()

m5::nfc::NFC m5::unit::UnitWS1850S::NFCMode ( ) const
inline

Gets the current operating mode.

Returns
NFC::A or NFC::B

◆ readTypeBReg()

bool m5::unit::UnitWS1850S::readTypeBReg ( uint8_t & value)

Read the TypeBReg (PN512 Page 1, address 0x1E)

Parameters
[out]value8-bit raw value (RxSOFReq / EOFSOFWidth / TxEGT / EOFSOFAdjust)
Returns
True if successful

◆ self_test()

bool m5::unit::UnitWS1850S::self_test ( )
overrideprotectedvirtual

self test

Returns
Always false
Warning
It seems to be compatible in function, but may not be compatible in behavior

Reimplemented from m5::unit::UnitMFRC522.

◆ writeTypeBReg()

bool m5::unit::UnitWS1850S::writeTypeBReg ( const uint8_t value)

Write the TypeBReg (PN512 Page 1, address 0x1E)

Parameters
value8-bit raw value. bit[5] is RFU (must be 0) per PN512 datasheet 8.2.2.15.
Returns
True if successful, false if reserved bit set or I2C error
Note
Effective only on PN512-compatible silicon (e.g. WS1850S).