17static constexpr size_t PN532_MAX_LOG_BYTES = 64;
31 const bool ready = this->
read_byte() & 0x01;
41 ESP_LOGV_HEX(TAG, data.data(), data.size(), PN532_MAX_LOG_BYTES,
"Writing data: %s");
58 ESP_LOGV(TAG,
"Reading data");
65 ESP_LOGV_HEX(TAG, data.data(), data.size(), PN532_MAX_LOG_BYTES,
"Read data: %s");
70 ESP_LOGV(TAG,
"Reading response");
80 std::array<uint8_t, 7> header;
81 this->
read_array(header.data(), header.size());
83#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
86 ESP_LOGV(TAG,
"Header data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), header.data(), header.size()));
88 if (header[0] != 0x00 || header[1] != 0x00 || header[2] != 0xFF) {
90 ESP_LOGV(TAG,
"read data invalid preamble!");
95 bool valid_header = (
static_cast<uint8_t
>(header[3] + header[4]) == 0 &&
97 header[6] == command + 1);
100 ESP_LOGV(TAG,
"read data invalid header!");
106 uint8_t full_len = header[3];
108 ESP_LOGV(TAG,
"read data has no payload");
114 uint8_t
len = full_len - 1;
116 ESP_LOGV(TAG,
"Reading response of length %d",
len);
118 data.resize(
len + 1);
122 ESP_LOGV(TAG,
"Response data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
128 ESP_LOGV(TAG,
"read data invalid checksum! %02X != %02X", data[
len - 1],
checksum);
132 if (data[
len] != 0x00) {
133 ESP_LOGV(TAG,
"read data invalid postamble!");
137 data.resize(
len - 1);
143 PN532::dump_config();
144 LOG_PIN(
" CS Pin: ", this->
cs_);
virtual void digital_write(bool value)=0
Minimal static vector - saves memory by avoiding std::vector overhead.
enum PN532ReadReady read_ready_(bool block)
void dump_config() override
bool write_data(std::span< const uint8_t > data) override
bool is_read_ready() override
bool read_data(pn532::PN532Frame &data, size_t len) override
bool read_response(uint8_t command, pn532::PN532Frame &data) override
void spi_setup() override
void write_byte(uint8_t data)
void write_array(const uint8_t *data, size_t length)
void read_array(uint8_t *data, size_t length)
ESPHOME_LOG_TAG(TAG, "pn532_spi")
constexpr uint8_t sum_bytes(const uint8_t *data, size_t len, uint8_t sum=0)
Add up the bytes of data with size len, truncated to 8 bits: the checksum many serial and IR protocol...
char * format_hex_pretty_to(char *buffer, size_t buffer_size, const uint8_t *data, size_t length, char separator)
Format byte array as uppercase hex to buffer (base implementation).
constexpr size_t format_hex_pretty_size(size_t byte_count)
Calculate buffer size needed for format_hex_pretty_to with separator: "XX:XX:...:XX\0".
void HOT delay(uint32_t ms)