14static const char *
const TAG =
"pn532_spi";
17static constexpr size_t PN532_MAX_LOG_BYTES = 64;
31 const bool ready = this->
read_byte() & 0x01;
41#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
44 ESP_LOGV(TAG,
"Writing data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
61 ESP_LOGV(TAG,
"Reading data");
68#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
71 ESP_LOGV(TAG,
"Read data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
76 ESP_LOGV(TAG,
"Reading response");
86 std::array<uint8_t, 7> header;
87 this->
read_array(header.data(), header.size());
89#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
92 ESP_LOGV(TAG,
"Header data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), header.data(), header.size()));
94 if (header[0] != 0x00 || header[1] != 0x00 || header[2] != 0xFF) {
96 ESP_LOGV(TAG,
"read data invalid preamble!");
101 bool valid_header = (
static_cast<uint8_t
>(header[3] + header[4]) == 0 &&
103 header[6] == command + 1);
106 ESP_LOGV(TAG,
"read data invalid header!");
112 uint8_t full_len = header[3];
114 ESP_LOGV(TAG,
"read data has no payload");
120 uint8_t
len = full_len - 1;
122 ESP_LOGV(TAG,
"Reading response of length %d",
len);
124 data.resize(
len + 1);
128 ESP_LOGV(TAG,
"Response data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
130 uint8_t
checksum = header[5] + header[6];
131 for (
int i = 0; i <
len - 1; i++) {
132 uint8_t dat = data[i];
138 ESP_LOGV(TAG,
"read data invalid checksum! %02X != %02X", data[
len - 1],
checksum);
142 if (data[
len] != 0x00) {
143 ESP_LOGV(TAG,
"read data invalid postamble!");
147 data.resize(
len - 1);
153 PN532::dump_config();
154 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)
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)