ESPHome 2026.3.0-dev
Loading...
Searching...
No Matches
remote_receiver.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <cinttypes>
7
8#if defined(USE_ESP32)
9#include <soc/soc_caps.h>
10#if SOC_RMT_SUPPORTED
11#include <driver/rmt_rx.h>
12#endif // SOC_RMT_SUPPORTED
13#endif // USE_ESP32
14
16
17#if defined(USE_ESP8266) || defined(USE_LIBRETINY) || defined(USE_RP2040) || (defined(USE_ESP32) && !SOC_RMT_SUPPORTED)
18struct RemoteReceiverComponentStore {
19 static void gpio_intr(RemoteReceiverComponentStore *arg);
20
24 volatile int32_t *buffer{nullptr};
26 volatile uint32_t buffer_write{0};
28 volatile uint32_t buffer_start{0};
30 uint32_t buffer_read{0};
31 volatile uint32_t commit_micros{0};
32 volatile uint32_t prev_micros{0};
33 uint32_t buffer_size{1000};
34 uint32_t filter_us{10};
35 uint32_t idle_us{10000};
37 volatile bool commit_level{false};
38 volatile bool prev_level{false};
39 volatile bool overflow{false};
40};
41#elif defined(USE_ESP32) && SOC_RMT_SUPPORTED
44 volatile uint8_t *buffer{nullptr};
46 volatile uint32_t buffer_write{0};
48 volatile uint32_t buffer_read{0};
49 bool overflow{false};
50 uint32_t buffer_size{1000};
51 uint32_t receive_size{0};
52 uint32_t filter_symbols{0};
53 esp_err_t error{ESP_OK};
54 rmt_receive_config_t config;
55};
56#endif
57
59 public Component
60#if defined(USE_ESP32) && SOC_RMT_SUPPORTED
61 ,
63#endif
64
65{
66 public:
68 void setup() override;
69 void dump_config() override;
70 void loop() override;
71
72#if defined(USE_ESP32) && SOC_RMT_SUPPORTED
73 void set_filter_symbols(uint32_t filter_symbols) { this->filter_symbols_ = filter_symbols; }
74 void set_receive_symbols(uint32_t receive_symbols) { this->receive_symbols_ = receive_symbols; }
75 void set_with_dma(bool with_dma) { this->with_dma_ = with_dma; }
76 void set_carrier_duty_percent(uint8_t carrier_duty_percent) { this->carrier_duty_percent_ = carrier_duty_percent; }
77 void set_carrier_frequency(uint32_t carrier_frequency) { this->carrier_frequency_ = carrier_frequency; }
78#endif
79 void set_buffer_size(uint32_t buffer_size) { this->buffer_size_ = buffer_size; }
80 void set_filter_us(uint32_t filter_us) { this->filter_us_ = filter_us; }
81 void set_idle_us(uint32_t idle_us) { this->idle_us_ = idle_us; }
82
83 protected:
84#if defined(USE_ESP32) && SOC_RMT_SUPPORTED
85 void decode_rmt_(rmt_symbol_word_t *item, size_t item_count);
86 rmt_channel_handle_t channel_{NULL};
87 uint32_t filter_symbols_{0};
88 uint32_t receive_symbols_{0};
89 bool with_dma_{false};
90 uint32_t carrier_frequency_{0};
92 esp_err_t error_code_{ESP_OK};
93 std::string error_string_{""};
94#endif
95
96#if defined(USE_ESP8266) || defined(USE_LIBRETINY) || defined(USE_RP2040) || defined(USE_ESP32)
98#endif
99
100#if defined(USE_ESP8266) || defined(USE_LIBRETINY) || defined(USE_RP2040) || (defined(USE_ESP32) && !SOC_RMT_SUPPORTED)
102#endif
103
104 uint32_t buffer_size_{};
105 uint32_t filter_us_{10};
106 uint32_t idle_us_{10000};
107};
108
109} // namespace esphome::remote_receiver
Helper class to request loop() to be called as fast as possible.
Definition helpers.h:1727
Copy of GPIOPin that is safe to use from ISRs (with no virtual functions)
Definition gpio.h:92
void set_carrier_frequency(uint32_t carrier_frequency)
void set_carrier_duty_percent(uint8_t carrier_duty_percent)
void decode_rmt_(rmt_symbol_word_t *item, size_t item_count)
void set_receive_symbols(uint32_t receive_symbols)
static void gpio_intr(RemoteReceiverComponentStore *arg)
uint32_t buffer_read
The position last read from.
volatile uint32_t buffer_start
The start position of the last sequence.
volatile int32_t * buffer
Stores pulse durations in microseconds as signed integers.
volatile uint32_t buffer_write
The position last written to.