mirror of
https://github.com/esphome/esphome.git
synced 2026-06-02 19:18:20 +08:00
[cc1101] Add on_packet listener callback code (packet_transport) (#13344)
This commit is contained in:
committed by
GitHub
parent
258b73d7f6
commit
1095bde2db
@@ -152,6 +152,13 @@ void CC1101Component::setup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CC1101Component::call_listeners_(const std::vector<uint8_t> &packet, float freq_offset, float rssi, uint8_t lqi) {
|
||||||
|
for (auto &listener : this->listeners_) {
|
||||||
|
listener->on_packet(packet, freq_offset, rssi, lqi);
|
||||||
|
}
|
||||||
|
this->packet_trigger_->trigger(packet, freq_offset, rssi, lqi);
|
||||||
|
}
|
||||||
|
|
||||||
void CC1101Component::loop() {
|
void CC1101Component::loop() {
|
||||||
if (this->state_.PKT_FORMAT != static_cast<uint8_t>(PacketFormat::PACKET_FORMAT_FIFO) || this->gdo0_pin_ == nullptr ||
|
if (this->state_.PKT_FORMAT != static_cast<uint8_t>(PacketFormat::PACKET_FORMAT_FIFO) || this->gdo0_pin_ == nullptr ||
|
||||||
!this->gdo0_pin_->digital_read()) {
|
!this->gdo0_pin_->digital_read()) {
|
||||||
@@ -198,7 +205,7 @@ void CC1101Component::loop() {
|
|||||||
bool crc_ok = (this->state_.LQI & STATUS_CRC_OK_MASK) != 0;
|
bool crc_ok = (this->state_.LQI & STATUS_CRC_OK_MASK) != 0;
|
||||||
uint8_t lqi = this->state_.LQI & STATUS_LQI_MASK;
|
uint8_t lqi = this->state_.LQI & STATUS_LQI_MASK;
|
||||||
if (this->state_.CRC_EN == 0 || crc_ok) {
|
if (this->state_.CRC_EN == 0 || crc_ok) {
|
||||||
this->packet_trigger_->trigger(this->packet_, freq_offset, rssi, lqi);
|
this->call_listeners_(this->packet_, freq_offset, rssi, lqi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return to rx
|
// Return to rx
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ namespace esphome::cc1101 {
|
|||||||
|
|
||||||
enum class CC1101Error { NONE = 0, TIMEOUT, PARAMS, CRC_ERROR, FIFO_OVERFLOW, PLL_LOCK };
|
enum class CC1101Error { NONE = 0, TIMEOUT, PARAMS, CRC_ERROR, FIFO_OVERFLOW, PLL_LOCK };
|
||||||
|
|
||||||
|
class CC1101Listener {
|
||||||
|
public:
|
||||||
|
virtual void on_packet(const std::vector<uint8_t> &packet, float freq_offset, float rssi, uint8_t lqi) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class CC1101Component : public Component,
|
class CC1101Component : public Component,
|
||||||
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
|
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
|
||||||
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_1MHZ> {
|
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_1MHZ> {
|
||||||
@@ -73,6 +78,7 @@ class CC1101Component : public Component,
|
|||||||
|
|
||||||
// Packet mode operations
|
// Packet mode operations
|
||||||
CC1101Error transmit_packet(const std::vector<uint8_t> &packet);
|
CC1101Error transmit_packet(const std::vector<uint8_t> &packet);
|
||||||
|
void register_listener(CC1101Listener *listener) { this->listeners_.push_back(listener); }
|
||||||
Trigger<std::vector<uint8_t>, float, float, uint8_t> *get_packet_trigger() const { return this->packet_trigger_; }
|
Trigger<std::vector<uint8_t>, float, float, uint8_t> *get_packet_trigger() const { return this->packet_trigger_; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -89,9 +95,11 @@ class CC1101Component : public Component,
|
|||||||
InternalGPIOPin *gdo0_pin_{nullptr};
|
InternalGPIOPin *gdo0_pin_{nullptr};
|
||||||
|
|
||||||
// Packet handling
|
// Packet handling
|
||||||
|
void call_listeners_(const std::vector<uint8_t> &packet, float freq_offset, float rssi, uint8_t lqi);
|
||||||
Trigger<std::vector<uint8_t>, float, float, uint8_t> *packet_trigger_{
|
Trigger<std::vector<uint8_t>, float, float, uint8_t> *packet_trigger_{
|
||||||
new Trigger<std::vector<uint8_t>, float, float, uint8_t>()};
|
new Trigger<std::vector<uint8_t>, float, float, uint8_t>()};
|
||||||
std::vector<uint8_t> packet_;
|
std::vector<uint8_t> packet_;
|
||||||
|
std::vector<CC1101Listener *> listeners_;
|
||||||
|
|
||||||
// Low-level Helpers
|
// Low-level Helpers
|
||||||
uint8_t strobe_(Command cmd);
|
uint8_t strobe_(Command cmd);
|
||||||
|
|||||||
Reference in New Issue
Block a user