ESPHome 2026.1.0-dev
Loading...
Searching...
No Matches
uart_event.cpp
Go to the documentation of this file.
1#include "uart_event.h"
2#include "esphome/core/log.h"
3#include <algorithm>
4
5namespace esphome::uart {
6
7static const char *const TAG = "uart.event";
8
10
11void UARTEvent::dump_config() { LOG_EVENT("", "UART Event", this); }
12
13void UARTEvent::loop() { this->read_data_(); }
14
15void UARTEvent::add_event_matcher(const char *event_name, const uint8_t *match_data, size_t match_data_len) {
16 this->matchers_.push_back({event_name, match_data, match_data_len});
17 if (match_data_len > this->max_matcher_len_) {
18 this->max_matcher_len_ = match_data_len;
19 }
20}
21
23 while (this->available()) {
24 uint8_t data;
25 this->read_byte(&data);
26 this->buffer_.push_back(data);
27
28 bool match_found = false;
29 for (const auto &matcher : this->matchers_) {
30 if (this->buffer_.size() < matcher.data_len) {
31 continue;
32 }
33
34 if (std::equal(matcher.data, matcher.data + matcher.data_len, this->buffer_.end() - matcher.data_len)) {
35 this->trigger(matcher.event_name);
36 this->buffer_.clear();
37 match_found = true;
38 break;
39 }
40 }
41
42 if (!match_found && this->max_matcher_len_ > 0 && this->buffer_.size() > this->max_matcher_len_) {
43 this->buffer_.erase(this->buffer_.begin());
44 }
45 }
46}
47
48} // namespace esphome::uart
void trigger(const std::string &event_type)
Definition event.cpp:11
bool read_byte(uint8_t *data)
Definition uart.h:34
void dump_config() override
std::vector< uint8_t > buffer_
Definition uart_event.h:27
void setup() override
Definition uart_event.cpp:9
void add_event_matcher(const char *event_name, const uint8_t *match_data, size_t match_data_len)
std::vector< EventMatcher > matchers_
Definition uart_event.h:26
const char *const TAG
Definition spi.cpp:7