mirror of
https://github.com/esphome/esphome.git
synced 2025-10-22 11:43:51 +01:00
Add support for PN7160 (#5486)
This commit is contained in:
54
esphome/components/pn7160_spi/pn7160_spi.cpp
Normal file
54
esphome/components/pn7160_spi/pn7160_spi.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include "pn7160_spi.h"
|
||||
#include "esphome/core/log.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace pn7160_spi {
|
||||
|
||||
static const char *const TAG = "pn7160_spi";
|
||||
|
||||
void PN7160Spi::setup() {
|
||||
this->spi_setup();
|
||||
this->cs_->digital_write(false);
|
||||
PN7160::setup();
|
||||
}
|
||||
|
||||
uint8_t PN7160Spi::read_nfcc(nfc::NciMessage &rx, const uint16_t timeout) {
|
||||
if (this->wait_for_irq_(timeout) != nfc::STATUS_OK) {
|
||||
ESP_LOGW(TAG, "read_nfcc_() timeout waiting for IRQ");
|
||||
return nfc::STATUS_FAILED;
|
||||
}
|
||||
|
||||
rx.get_message().resize(nfc::NCI_PKT_HEADER_SIZE);
|
||||
this->enable();
|
||||
this->write_byte(TDD_SPI_READ); // send "transfer direction detector"
|
||||
this->read_array(rx.get_message().data(), nfc::NCI_PKT_HEADER_SIZE);
|
||||
|
||||
uint8_t length = rx.get_payload_size();
|
||||
if (length > 0) {
|
||||
rx.get_message().resize(length + nfc::NCI_PKT_HEADER_SIZE);
|
||||
this->read_array(rx.get_message().data() + nfc::NCI_PKT_HEADER_SIZE, length);
|
||||
}
|
||||
this->disable();
|
||||
// semaphore to ensure transaction is complete before returning
|
||||
if (this->wait_for_irq_(pn7160::NFCC_DEFAULT_TIMEOUT, false) != nfc::STATUS_OK) {
|
||||
ESP_LOGW(TAG, "read_nfcc_() post-read timeout waiting for IRQ line to clear");
|
||||
return nfc::STATUS_FAILED;
|
||||
}
|
||||
return nfc::STATUS_OK;
|
||||
}
|
||||
|
||||
uint8_t PN7160Spi::write_nfcc(nfc::NciMessage &tx) {
|
||||
this->enable();
|
||||
this->write_byte(TDD_SPI_WRITE); // send "transfer direction detector"
|
||||
this->write_array(tx.encode().data(), tx.encode().size());
|
||||
this->disable();
|
||||
return nfc::STATUS_OK;
|
||||
}
|
||||
|
||||
void PN7160Spi::dump_config() {
|
||||
PN7160::dump_config();
|
||||
LOG_PIN(" CS Pin: ", this->cs_);
|
||||
}
|
||||
|
||||
} // namespace pn7160_spi
|
||||
} // namespace esphome
|
Reference in New Issue
Block a user