ESPHome  2024.3.1
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
esphome::rc522::RC522 Class Referenceabstract

#include <rc522.h>

Inheritance diagram for esphome::rc522::RC522:
esphome::PollingComponent esphome::Component esphome::rc522_i2c::RC522I2C esphome::rc522_spi::RC522Spi

Public Member Functions

void setup () override
 
void dump_config () override
 
void update () override
 
float get_setup_priority () const override
 
void loop () override
 
void register_tag (RC522BinarySensor *tag)
 
void register_ontag_trigger (RC522Trigger *trig)
 
void register_ontagremoved_trigger (RC522Trigger *trig)
 
void set_reset_pin (GPIOPin *reset)
 
- Public Member Functions inherited from esphome::PollingComponent
 PollingComponent ()
 
 PollingComponent (uint32_t update_interval)
 Initialize this polling component with the given update interval in ms. More...
 
virtual void set_update_interval (uint32_t update_interval)
 Manually set the update interval in ms for this polling object. More...
 
void call_setup () override
 
virtual uint32_t get_update_interval () const
 Get the update interval in ms of this sensor. More...
 
void start_poller ()
 
void stop_poller ()
 
- Public Member Functions inherited from esphome::Component
float get_actual_setup_priority () const
 
void set_setup_priority (float priority)
 
virtual float get_loop_priority () const
 priority of loop(). More...
 
void call ()
 
virtual void on_shutdown ()
 
virtual void on_safe_shutdown ()
 
uint32_t get_component_state () const
 
virtual void mark_failed ()
 Mark this component as failed. More...
 
bool is_failed ()
 
bool is_ready ()
 
virtual bool can_proceed ()
 
bool status_has_warning () const
 
bool status_has_error () const
 
void status_set_warning (const char *message="unspecified")
 
void status_set_error (const char *message="unspecified")
 
void status_clear_warning ()
 
void status_clear_error ()
 
void status_momentary_warning (const std::string &name, uint32_t length=5000)
 
void status_momentary_error (const std::string &name, uint32_t length=5000)
 
bool has_overridden_loop () const
 
void set_component_source (const char *source)
 Set where this component was loaded from for some debug messages. More...
 
const char * get_component_source () const
 Get the integration where this component was declared as a string. More...
 

Protected Types

enum  StatusCode : uint8_t {
  STATUS_OK, STATUS_WAITING, STATUS_ERROR, STATUS_COLLISION,
  STATUS_TIMEOUT, STATUS_NO_ROOM, STATUS_INTERNAL_ERROR, STATUS_INVALID,
  STATUS_CRC_WRONG, STATUS_MIFARE_NACK = 0xff
}
 
enum  State {
  STATE_NONE = 0, STATE_SETUP, STATE_INIT, STATE_PICC_REQUEST_A,
  STATE_READ_SERIAL, STATE_SELECT_SERIAL, STATE_SELECT_SERIAL_DONE, STATE_READ_SERIAL_DONE,
  STATE_DONE
}
 
enum  PcdRegister : uint8_t {
  COMMAND_REG = 0x01 << 1, COM_I_EN_REG = 0x02 << 1, DIV_I_EN_REG = 0x03 << 1, COM_IRQ_REG = 0x04 << 1,
  DIV_IRQ_REG = 0x05 << 1, ERROR_REG = 0x06 << 1, STATUS1_REG = 0x07 << 1, STATUS2_REG = 0x08 << 1,
  FIFO_DATA_REG = 0x09 << 1, FIFO_LEVEL_REG = 0x0A << 1, WATER_LEVEL_REG = 0x0B << 1, CONTROL_REG = 0x0C << 1,
  BIT_FRAMING_REG = 0x0D << 1, COLL_REG = 0x0E << 1, MODE_REG = 0x11 << 1, TX_MODE_REG = 0x12 << 1,
  RX_MODE_REG = 0x13 << 1, TX_CONTROL_REG = 0x14 << 1, TX_ASK_REG = 0x15 << 1, TX_SEL_REG = 0x16 << 1,
  RX_SEL_REG = 0x17 << 1, RX_THRESHOLD_REG = 0x18 << 1, DEMOD_REG = 0x19 << 1, MF_TX_REG = 0x1C << 1,
  MF_RX_REG = 0x1D << 1, SERIAL_SPEED_REG = 0x1F << 1, CRC_RESULT_REG_H = 0x21 << 1, CRC_RESULT_REG_L = 0x22 << 1,
  MOD_WIDTH_REG = 0x24 << 1, RF_CFG_REG = 0x26 << 1, GS_N_REG = 0x27 << 1, CW_GS_P_REG = 0x28 << 1,
  MOD_GS_P_REG = 0x29 << 1, T_MODE_REG = 0x2A << 1, T_PRESCALER_REG = 0x2B << 1, T_RELOAD_REG_H = 0x2C << 1,
  T_RELOAD_REG_L = 0x2D << 1, T_COUNTER_VALUE_REG_H = 0x2E << 1, T_COUNTER_VALUE_REG_L = 0x2F << 1, TEST_SEL1_REG = 0x31 << 1,
  TEST_SEL2_REG = 0x32 << 1, TEST_PIN_EN_REG = 0x33 << 1, TEST_PIN_VALUE_REG = 0x34 << 1, TEST_BUS_REG = 0x35 << 1,
  AUTO_TEST_REG = 0x36 << 1, VERSION_REG = 0x37 << 1, ANALOG_TEST_REG = 0x38 << 1, TEST_DA_C1_REG = 0x39 << 1,
  TEST_DA_C2_REG = 0x3A << 1, TEST_ADC_REG = 0x3B << 1
}
 
enum  PcdCommand : uint8_t {
  PCD_IDLE = 0x00, PCD_MEM = 0x01, PCD_GENERATE_RANDOM_ID = 0x02, PCD_CALC_CRC = 0x03,
  PCD_TRANSMIT = 0x04, PCD_NO_CMD_CHANGE = 0x07, PCD_RECEIVE = 0x08, PCD_TRANSCEIVE,
  PCD_MF_AUTHENT = 0x0E, PCD_SOFT_RESET = 0x0F
}
 
enum  PiccCommand : uint8_t {
  PICC_CMD_REQA = 0x26, PICC_CMD_WUPA = 0x52, PICC_CMD_CT = 0x88, PICC_CMD_SEL_CL1 = 0x93,
  PICC_CMD_SEL_CL2 = 0x95, PICC_CMD_SEL_CL3 = 0x97, PICC_CMD_HLTA = 0x50, PICC_CMD_RATS = 0xE0,
  PICC_CMD_MF_AUTH_KEY_A = 0x60, PICC_CMD_MF_AUTH_KEY_B = 0x61, PICC_CMD_MF_READ, PICC_CMD_MF_WRITE = 0xA0,
  PICC_CMD_MF_DECREMENT, PICC_CMD_MF_INCREMENT, PICC_CMD_MF_RESTORE = 0xC2, PICC_CMD_MF_TRANSFER = 0xB0,
  PICC_CMD_UL_WRITE = 0xA2
}
 
enum  RC522Error { NONE = 0, RESET_FAILED }
 

Protected Member Functions

void pcd_reset_ ()
 Performs a soft reset on the MFRC522 chip and waits for it to be ready again. More...
 
void initialize_ ()
 
void pcd_antenna_on_ ()
 Turns the antenna on by enabling pins TX1 and TX2. More...
 
void pcd_antenna_off_ ()
 Turns the antenna off by disabling pins TX1 and TX2. More...
 
virtual uint8_t pcd_read_register (PcdRegister reg)=0
 
virtual void pcd_read_register (PcdRegister reg, uint8_t count, uint8_t *values, uint8_t rx_align)=0
 Reads a number of uint8_ts from the specified register in the MFRC522 chip. More...
 
virtual void pcd_write_register (PcdRegister reg, uint8_t value)=0
 
virtual void pcd_write_register (PcdRegister reg, uint8_t count, uint8_t *values)=0
 Writes a number of uint8_ts to the specified register in the MFRC522 chip. More...
 
void pcd_set_register_bit_mask_ (PcdRegister reg, uint8_t mask)
 Sets the bits given in mask in register reg. More...
 
void pcd_clear_register_bit_mask_ (PcdRegister reg, uint8_t mask)
 Clears the bits given in mask from register reg. More...
 
void pcd_transceive_data_ (uint8_t send_len)
 Transfers data to the MFRC522 FIFO, executes a command, waits for completion and transfers data back from the FIFO. More...
 
void pcd_calculate_crc_ (uint8_t *data, uint8_t length)
 Use the CRC coprocessor in the MFRC522 to calculate a CRC_A. More...
 
StatusCode await_transceive_ ()
 
StatusCode await_crc_ ()
 
- Protected Member Functions inherited from esphome::Component
virtual void call_loop ()
 
virtual void call_dump_config ()
 
void set_interval (const std::string &name, uint32_t interval, std::function< void()> &&f)
 Set an interval function with a unique name. More...
 
void set_interval (uint32_t interval, std::function< void()> &&f)
 
bool cancel_interval (const std::string &name)
 Cancel an interval function. More...
 
void set_retry (const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
 Set an retry function with a unique name. More...
 
void set_retry (uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
 
bool cancel_retry (const std::string &name)
 Cancel a retry function. More...
 
void set_timeout (const std::string &name, uint32_t timeout, std::function< void()> &&f)
 Set a timeout function with a unique name. More...
 
void set_timeout (uint32_t timeout, std::function< void()> &&f)
 
bool cancel_timeout (const std::string &name)
 Cancel a timeout function. More...
 
void defer (const std::string &name, std::function< void()> &&f)
 Defer a callback to the next loop() call. More...
 
void defer (std::function< void()> &&f)
 Defer a callback to the next loop() call. More...
 
bool cancel_defer (const std::string &name)
 Cancel a defer callback using the specified name, name must not be empty. More...
 

Protected Attributes

enum esphome::rc522::RC522::State STATE_NONE
 
bool awaiting_comm_
 
uint32_t awaiting_comm_time_
 
uint8_t buffer_ [9]
 buffer for communication, the first bits [0..back_idx-1] are for tx , [back_idx..back_idx+back_len] for rx More...
 
uint8_t send_len_
 
uint8_t back_length_
 In: Max number of uint8_ts to write to *backData. Out: The number of uint8_ts returned. More...
 
uint8_t uid_buffer_ [10]
 
uint8_t uid_idx_ = 0
 
uint8_t error_counter_ = 0
 
uint8_t rx_align_
 
uint8_t * valid_bits_
 
GPIOPinreset_pin_ {nullptr}
 
uint8_t reset_count_ {0}
 
uint32_t reset_timeout_ {0}
 
std::vector< RC522BinarySensor * > binary_sensors_
 
std::vector< RC522Trigger * > triggers_ontag_
 
std::vector< RC522Trigger * > triggers_ontagremoved_
 
std::vector< uint8_t > current_uid_
 
enum esphome::rc522::RC522::RC522Error NONE
 
- Protected Attributes inherited from esphome::PollingComponent
uint32_t update_interval_
 
- Protected Attributes inherited from esphome::Component
uint32_t component_state_ {0x0000}
 State of this component. More...
 
float setup_priority_override_ {NAN}
 
const char * component_source_ {nullptr}
 

Detailed Description

Definition at line 15 of file rc522.h.

Member Enumeration Documentation

◆ PcdCommand

enum esphome::rc522::RC522::PcdCommand : uint8_t
protected
Enumerator
PCD_IDLE 
PCD_MEM 
PCD_GENERATE_RANDOM_ID 
PCD_CALC_CRC 
PCD_TRANSMIT 
PCD_NO_CMD_CHANGE 
PCD_RECEIVE 
PCD_TRANSCEIVE 
PCD_MF_AUTHENT 
PCD_SOFT_RESET 

Definition at line 135 of file rc522.h.

◆ PcdRegister

enum esphome::rc522::RC522::PcdRegister : uint8_t
protected
Enumerator
COMMAND_REG 
COM_I_EN_REG 
DIV_I_EN_REG 
COM_IRQ_REG 
DIV_IRQ_REG 
ERROR_REG 
STATUS1_REG 
STATUS2_REG 
FIFO_DATA_REG 
FIFO_LEVEL_REG 
WATER_LEVEL_REG 
CONTROL_REG 
BIT_FRAMING_REG 
COLL_REG 
MODE_REG 
TX_MODE_REG 
RX_MODE_REG 
TX_CONTROL_REG 
TX_ASK_REG 
TX_SEL_REG 
RX_SEL_REG 
RX_THRESHOLD_REG 
DEMOD_REG 
MF_TX_REG 
MF_RX_REG 
SERIAL_SPEED_REG 
CRC_RESULT_REG_H 
CRC_RESULT_REG_L 
MOD_WIDTH_REG 
RF_CFG_REG 
GS_N_REG 
CW_GS_P_REG 
MOD_GS_P_REG 
T_MODE_REG 
T_PRESCALER_REG 
T_RELOAD_REG_H 
T_RELOAD_REG_L 
T_COUNTER_VALUE_REG_H 
T_COUNTER_VALUE_REG_L 
TEST_SEL1_REG 
TEST_SEL2_REG 
TEST_PIN_EN_REG 
TEST_PIN_VALUE_REG 
TEST_BUS_REG 
AUTO_TEST_REG 
VERSION_REG 
ANALOG_TEST_REG 
TEST_DA_C1_REG 
TEST_DA_C2_REG 
TEST_ADC_REG 

Definition at line 60 of file rc522.h.

◆ PiccCommand

enum esphome::rc522::RC522::PiccCommand : uint8_t
protected
Enumerator
PICC_CMD_REQA 
PICC_CMD_WUPA 
PICC_CMD_CT 
PICC_CMD_SEL_CL1 
PICC_CMD_SEL_CL2 
PICC_CMD_SEL_CL3 
PICC_CMD_HLTA 
PICC_CMD_RATS 
PICC_CMD_MF_AUTH_KEY_A 
PICC_CMD_MF_AUTH_KEY_B 
PICC_CMD_MF_READ 
PICC_CMD_MF_WRITE 
PICC_CMD_MF_DECREMENT 
PICC_CMD_MF_INCREMENT 
PICC_CMD_MF_RESTORE 
PICC_CMD_MF_TRANSFER 
PICC_CMD_UL_WRITE 

Definition at line 151 of file rc522.h.

◆ RC522Error

Enumerator
NONE 
RESET_FAILED 

Definition at line 250 of file rc522.h.

◆ State

Enumerator
STATE_NONE 
STATE_SETUP 
STATE_INIT 
STATE_PICC_REQUEST_A 
STATE_READ_SERIAL 
STATE_SELECT_SERIAL 
STATE_SELECT_SERIAL_DONE 
STATE_READ_SERIAL_DONE 
STATE_DONE 

Definition at line 48 of file rc522.h.

◆ StatusCode

enum esphome::rc522::RC522::StatusCode : uint8_t
protected
Enumerator
STATUS_OK 
STATUS_WAITING 
STATUS_ERROR 
STATUS_COLLISION 
STATUS_TIMEOUT 
STATUS_NO_ROOM 
STATUS_INTERNAL_ERROR 
STATUS_INVALID 
STATUS_CRC_WRONG 
STATUS_MIFARE_NACK 

Definition at line 35 of file rc522.h.

Member Function Documentation

◆ await_crc_()

RC522::StatusCode esphome::rc522::RC522::await_crc_ ( )
protected

Definition at line 463 of file rc522.cpp.

◆ await_transceive_()

RC522::StatusCode esphome::rc522::RC522::await_transceive_ ( )
protected

Definition at line 383 of file rc522.cpp.

◆ dump_config()

void esphome::rc522::RC522::dump_config ( )
overridevirtual

Reimplemented from esphome::Component.

Reimplemented in esphome::rc522_spi::RC522Spi, and esphome::rc522_i2c::RC522I2C.

Definition at line 98 of file rc522.cpp.

◆ get_setup_priority()

float esphome::rc522::RC522::get_setup_priority ( ) const
inlineoverridevirtual

Reimplemented from esphome::Component.

Definition at line 22 of file rc522.h.

◆ initialize_()

void esphome::rc522::RC522::initialize_ ( )
protected

Definition at line 66 of file rc522.cpp.

◆ loop()

void esphome::rc522::RC522::loop ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 129 of file rc522.cpp.

◆ pcd_antenna_off_()

void esphome::rc522::RC522::pcd_antenna_off_ ( )
protected

Turns the antenna off by disabling pins TX1 and TX2.

Definition at line 330 of file rc522.cpp.

◆ pcd_antenna_on_()

void esphome::rc522::RC522::pcd_antenna_on_ ( )
protected

Turns the antenna on by enabling pins TX1 and TX2.

After a reset these pins are disabled.

Definition at line 320 of file rc522.cpp.

◆ pcd_calculate_crc_()

void esphome::rc522::RC522::pcd_calculate_crc_ ( uint8_t *  data,
uint8_t  length 
)
protected

Use the CRC coprocessor in the MFRC522 to calculate a CRC_A.

Returns
STATUS_OK on success, STATUS_??? otherwise.
Parameters
dataIn: Pointer to the data to transfer to the FIFO for CRC calculation.
lengthIn: The number of uint8_ts to transfer.

Definition at line 449 of file rc522.cpp.

◆ pcd_clear_register_bit_mask_()

void esphome::rc522::RC522::pcd_clear_register_bit_mask_ ( PcdRegister  reg,
uint8_t  mask 
)
protected

Clears the bits given in mask from register reg.

Parameters
regThe register to update. One of the PCD_Register enums.
maskThe bits to clear.

Definition at line 350 of file rc522.cpp.

◆ pcd_read_register() [1/2]

virtual uint8_t esphome::rc522::RC522::pcd_read_register ( PcdRegister  reg)
protectedpure virtual
Parameters
regThe register to read from. One of the PCD_Register enums.

Implemented in esphome::rc522_spi::RC522Spi, and esphome::rc522_i2c::RC522I2C.

◆ pcd_read_register() [2/2]

virtual void esphome::rc522::RC522::pcd_read_register ( PcdRegister  reg,
uint8_t  count,
uint8_t *  values,
uint8_t  rx_align 
)
protectedpure virtual

Reads a number of uint8_ts from the specified register in the MFRC522 chip.

The interface is described in the datasheet section 8.1.2.

Parameters
regThe register to read from. One of the PCD_Register enums.
countThe number of uint8_ts to read
valuesuint8_t array to store the values in.
rx_alignOnly bit positions rxAlign..7 in values[0] are updated.

Implemented in esphome::rc522_spi::RC522Spi, and esphome::rc522_i2c::RC522I2C.

◆ pcd_reset_()

void esphome::rc522::RC522::pcd_reset_ ( )
protected

Performs a soft reset on the MFRC522 chip and waits for it to be ready again.

Definition at line 285 of file rc522.cpp.

◆ pcd_set_register_bit_mask_()

void esphome::rc522::RC522::pcd_set_register_bit_mask_ ( PcdRegister  reg,
uint8_t  mask 
)
protected

Sets the bits given in mask in register reg.

Parameters
regThe register to update. One of the PCD_Register enums.
maskThe bits to set.

Definition at line 340 of file rc522.cpp.

◆ pcd_transceive_data_()

void esphome::rc522::RC522::pcd_transceive_data_ ( uint8_t  send_len)
protected

Transfers data to the MFRC522 FIFO, executes a command, waits for completion and transfers data back from the FIFO.

CRC validation can only be done if backData and backLen are specified.

Returns
STATUS_OK on success, STATUS_??? otherwise.

Definition at line 363 of file rc522.cpp.

◆ pcd_write_register() [1/2]

virtual void esphome::rc522::RC522::pcd_write_register ( PcdRegister  reg,
uint8_t  value 
)
protectedpure virtual
Parameters
regThe register to write to. One of the PCD_Register enums.
valueThe value to write.

Implemented in esphome::rc522_spi::RC522Spi, and esphome::rc522_i2c::RC522I2C.

◆ pcd_write_register() [2/2]

virtual void esphome::rc522::RC522::pcd_write_register ( PcdRegister  reg,
uint8_t  count,
uint8_t *  values 
)
protectedpure virtual

Writes a number of uint8_ts to the specified register in the MFRC522 chip.

The interface is described in the datasheet section 8.1.2.

Parameters
regThe register to write to. One of the PCD_Register enums.
countThe number of uint8_ts to write to the register
valuesThe values to write. uint8_t array.

Implemented in esphome::rc522_spi::RC522Spi, and esphome::rc522_i2c::RC522I2C.

◆ register_ontag_trigger()

void esphome::rc522::RC522::register_ontag_trigger ( RC522Trigger trig)
inline

Definition at line 27 of file rc522.h.

◆ register_ontagremoved_trigger()

void esphome::rc522::RC522::register_ontagremoved_trigger ( RC522Trigger trig)
inline

Definition at line 28 of file rc522.h.

◆ register_tag()

void esphome::rc522::RC522::register_tag ( RC522BinarySensor tag)
inline

Definition at line 26 of file rc522.h.

◆ set_reset_pin()

void esphome::rc522::RC522::set_reset_pin ( GPIOPin reset)
inline

Definition at line 30 of file rc522.h.

◆ setup()

void esphome::rc522::RC522::setup ( )
overridevirtual

Reimplemented from esphome::Component.

Reimplemented in esphome::rc522_spi::RC522Spi.

Definition at line 40 of file rc522.cpp.

◆ update()

void esphome::rc522::RC522::update ( )
overridevirtual

Implements esphome::PollingComponent.

Definition at line 117 of file rc522.cpp.

Field Documentation

◆ awaiting_comm_

bool esphome::rc522::RC522::awaiting_comm_
protected

Definition at line 227 of file rc522.h.

◆ awaiting_comm_time_

uint32_t esphome::rc522::RC522::awaiting_comm_time_
protected

Definition at line 228 of file rc522.h.

◆ back_length_

uint8_t esphome::rc522::RC522::back_length_
protected

In: Max number of uint8_ts to write to *backData. Out: The number of uint8_ts returned.

Definition at line 235 of file rc522.h.

◆ binary_sensors_

std::vector<RC522BinarySensor *> esphome::rc522::RC522::binary_sensors_
protected

Definition at line 245 of file rc522.h.

◆ buffer_

uint8_t esphome::rc522::RC522::buffer_[9]
protected

buffer for communication, the first bits [0..back_idx-1] are for tx , [back_idx..back_idx+back_len] for rx

Definition at line 232 of file rc522.h.

◆ current_uid_

std::vector<uint8_t> esphome::rc522::RC522::current_uid_
protected

Definition at line 248 of file rc522.h.

◆ error_counter_

uint8_t esphome::rc522::RC522::error_counter_ = 0
protected

Definition at line 238 of file rc522.h.

◆ NONE

enum esphome::rc522::RC522::RC522Error esphome::rc522::RC522::NONE
protected

◆ reset_count_

uint8_t esphome::rc522::RC522::reset_count_ {0}
protected

Definition at line 243 of file rc522.h.

◆ reset_pin_

GPIOPin* esphome::rc522::RC522::reset_pin_ {nullptr}
protected

Definition at line 242 of file rc522.h.

◆ reset_timeout_

uint32_t esphome::rc522::RC522::reset_timeout_ {0}
protected

Definition at line 244 of file rc522.h.

◆ rx_align_

uint8_t esphome::rc522::RC522::rx_align_
protected

Definition at line 239 of file rc522.h.

◆ send_len_

uint8_t esphome::rc522::RC522::send_len_
protected

Definition at line 234 of file rc522.h.

◆ STATE_NONE

enum esphome::rc522::RC522::State esphome::rc522::RC522::STATE_NONE
protected

◆ triggers_ontag_

std::vector<RC522Trigger *> esphome::rc522::RC522::triggers_ontag_
protected

Definition at line 246 of file rc522.h.

◆ triggers_ontagremoved_

std::vector<RC522Trigger *> esphome::rc522::RC522::triggers_ontagremoved_
protected

Definition at line 247 of file rc522.h.

◆ uid_buffer_

uint8_t esphome::rc522::RC522::uid_buffer_[10]
protected

Definition at line 236 of file rc522.h.

◆ uid_idx_

uint8_t esphome::rc522::RC522::uid_idx_ = 0
protected

Definition at line 237 of file rc522.h.

◆ valid_bits_

uint8_t* esphome::rc522::RC522::valid_bits_
protected

Definition at line 240 of file rc522.h.


The documentation for this class was generated from the following files: