13 static const char *
const TAG =
"pn532_i2c";
22 std::vector<uint8_t> ready;
24 uint32_t start_time =
millis();
31 if (
millis() - start_time > 100) {
32 ESP_LOGV(TAG,
"Timed out waiting for readiness from PN532!");
43 ESP_LOGV(TAG,
"Reading response");
49 ESP_LOGV(TAG,
"Reading response of length %d", len);
50 if (!this->
read_data(data, 6 + len + 2)) {
51 ESP_LOGD(TAG,
"No response data");
55 if (data[1] != 0x00 && data[2] != 0x00 && data[3] != 0xFF) {
57 ESP_LOGV(TAG,
"read data invalid preamble!");
61 bool valid_header = (
static_cast<uint8_t
>(data[4] + data[5]) == 0 &&
63 data[7] == command + 1);
66 ESP_LOGV(TAG,
"read data invalid header!");
70 data.erase(data.begin(), data.begin() + 6);
73 for (
int i = 0; i < len + 1; i++) {
74 uint8_t dat = data[i];
77 checksum = ~checksum + 1;
79 if (data[len + 1] != checksum) {
80 ESP_LOGV(TAG,
"read data invalid checksum! %02X != %02X", data[len], checksum);
84 if (data[len + 2] != 0x00) {
85 ESP_LOGV(TAG,
"read data invalid postamble!");
89 data.erase(data.begin(), data.begin() + 2);
90 data.erase(data.end() - 2, data.end());
96 std::vector<uint8_t> data;
101 if (data[1] != 0x00 && data[2] != 0x00 && data[3] != 0xFF) {
103 ESP_LOGV(TAG,
"read data invalid preamble!");
107 bool valid_header = (
static_cast<uint8_t
>(data[4] + data[5]) == 0 &&
111 ESP_LOGV(TAG,
"read data invalid header!");
118 uint8_t full_len = data[4];
120 uint8_t
len = full_len - 1;
127 PN532::dump_config();
128 LOG_I2C_DEVICE(
this);
bool read_data(std::vector< uint8_t > &data, uint8_t len) override
bool write_data(const std::vector< uint8_t > &data) override
optional< std::array< uint8_t, N > > read_bytes_raw()
uint32_t IRAM_ATTR HOT millis()
ErrorCode write(const uint8_t *data, uint8_t len, bool stop=true)
uint8_t read_response_length_()
Implementation of SPI Controller mode.
void dump_config() override
bool read_response(uint8_t command, std::vector< uint8_t > &data) override
void IRAM_ATTR HOT delay(uint32_t ms)