13static const char *
const TAG =
"pn532_spi";
16static constexpr size_t PN532_MAX_LOG_BYTES = 64;
39#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
42 ESP_LOGV(TAG,
"Writing data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
59 ESP_LOGV(TAG,
"Reading data");
64 data.insert(data.begin(), 0x01);
65#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
68 ESP_LOGV(TAG,
"Read data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
73 ESP_LOGV(TAG,
"Reading response");
83 std::vector<uint8_t> header(7);
86#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
89 ESP_LOGV(TAG,
"Header data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), header.data(), header.size()));
91 if (header[0] != 0x00 && header[1] != 0x00 && header[2] != 0xFF) {
93 ESP_LOGV(TAG,
"read data invalid preamble!");
97 bool valid_header = (
static_cast<uint8_t
>(header[3] + header[4]) == 0 &&
99 header[6] == command + 1);
102 ESP_LOGV(TAG,
"read data invalid header!");
107 uint8_t full_len = header[3];
109 uint8_t
len = full_len - 1;
113 ESP_LOGV(TAG,
"Reading response of length %d",
len);
115 data.resize(
len + 1);
119 ESP_LOGV(TAG,
"Response data: %s",
format_hex_pretty_to(hex_buf,
sizeof(hex_buf), data.data(), data.size()));
121 uint8_t
checksum = header[5] + header[6];
122 for (
int i = 0; i <
len - 1; i++) {
123 uint8_t dat = data[i];
129 ESP_LOGV(TAG,
"read data invalid checksum! %02X != %02X", data[
len - 1],
checksum);
133 if (data[
len] != 0x00) {
134 ESP_LOGV(TAG,
"read data invalid postamble!");
138 data.erase(data.end() - 2, data.end());
144 PN532::dump_config();
145 LOG_PIN(
" CS Pin: ", this->
cs_);
virtual void digital_write(bool value)=0
enum PN532ReadReady read_ready_(bool block)
bool write_data(const std::vector< uint8_t > &data) override
void dump_config() override
bool read_data(std::vector< uint8_t > &data, uint8_t len) override
bool is_read_ready() override
bool read_response(uint8_t command, std::vector< uint8_t > &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)
Providing packet encoding functions for exchanging data with a remote host.
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 IRAM_ATTR HOT delay(uint32_t ms)