ESPHome 2026.3.0
Loading...
Searching...
No Matches
rf_bridge.h
Go to the documentation of this file.
1#pragma once
2
3#include <utility>
4#include <vector>
5
9
10namespace esphome {
11namespace rf_bridge {
12
13static const uint8_t RF_MESSAGE_SIZE = 9;
14static const uint8_t RF_CODE_START = 0xAA;
15static const uint8_t RF_CODE_ACK = 0xA0;
16static const uint8_t RF_CODE_LEARN = 0xA1;
17static const uint8_t RF_CODE_LEARN_KO = 0xA2;
18static const uint8_t RF_CODE_LEARN_OK = 0xA3;
19static const uint8_t RF_CODE_RFIN = 0xA4;
20static const uint8_t RF_CODE_RFOUT = 0xA5;
21static const uint8_t RF_CODE_ADVANCED_RFIN = 0xA6;
22static const uint8_t RF_CODE_SNIFFING_ON = 0xA6;
23static const uint8_t RF_CODE_SNIFFING_OFF = 0xA7;
24static const uint8_t RF_CODE_RFOUT_NEW = 0xA8;
25static const uint8_t RF_CODE_LEARN_NEW = 0xA9;
26static const uint8_t RF_CODE_LEARN_KO_NEW = 0xAA;
27static const uint8_t RF_CODE_LEARN_OK_NEW = 0xAB;
28static const uint8_t RF_CODE_RFOUT_BUCKET = 0xB0;
29static const uint8_t RF_CODE_RFIN_BUCKET = 0xB1;
30static const uint8_t RF_CODE_BEEP = 0xC0;
31static const uint8_t RF_CODE_STOP = 0x55;
32static const uint8_t RF_DEBOUNCE = 200;
33static const size_t MAX_RX_BUFFER_SIZE = 512;
34
36 uint16_t sync;
37 uint16_t low;
38 uint16_t high;
40};
41
43 uint8_t length;
44 uint8_t protocol;
45 std::string code;
46};
47
49 public:
50 void loop() override;
51 void dump_config() override;
52 void add_on_code_received_callback(std::function<void(RFBridgeData)> callback) {
53 this->data_callback_.add(std::move(callback));
54 }
56 this->advanced_data_callback_.add(std::move(callback));
57 }
58 void send_code(RFBridgeData data);
60 void learn();
64 void send_raw(const std::string &code);
65 void beep(uint16_t ms);
66
67 protected:
68 void ack_();
69 void decode_();
70 bool parse_bridge_byte_(uint8_t byte);
71 void write_byte_str_(const std::string &codes);
72
73 std::vector<uint8_t> rx_buffer_;
75
78};
79
80class RFBridgeReceivedCodeTrigger : public Trigger<RFBridgeData> {
81 public:
83 parent->add_on_code_received_callback([this](RFBridgeData data) { this->trigger(data); });
84 }
85};
86
87class RFBridgeReceivedAdvancedCodeTrigger : public Trigger<RFBridgeAdvancedData> {
88 public:
90 parent->add_on_advanced_code_received_callback([this](const RFBridgeAdvancedData &data) { this->trigger(data); });
91 }
92};
93
94template<typename... Ts> class RFBridgeSendCodeAction : public Action<Ts...> {
95 public:
98 TEMPLATABLE_VALUE(uint16_t, low)
99 TEMPLATABLE_VALUE(uint16_t, high)
101
102 void play(const Ts &...x) {
103 RFBridgeData data{};
104 data.sync = this->sync_.value(x...);
105 data.low = this->low_.value(x...);
106 data.high = this->high_.value(x...);
107 data.code = this->code_.value(x...);
108 this->parent_->send_code(data);
109 }
110
111 protected:
113};
114
115template<typename... Ts> class RFBridgeSendAdvancedCodeAction : public Action<Ts...> {
116 public:
119 TEMPLATABLE_VALUE(uint8_t, protocol)
120 TEMPLATABLE_VALUE(std::string, code)
121
122 void play(const Ts &...x) {
124 data.length = this->length_.value(x...);
125 data.protocol = this->protocol_.value(x...);
126 data.code = this->code_.value(x...);
127 this->parent_->send_advanced_code(data);
128 }
129
130 protected:
132};
133
134template<typename... Ts> class RFBridgeLearnAction : public Action<Ts...> {
135 public:
137
138 void play(const Ts &...x) { this->parent_->learn(); }
139
140 protected:
142};
143
144template<typename... Ts> class RFBridgeStartAdvancedSniffingAction : public Action<Ts...> {
145 public:
147
148 void play(const Ts &...x) { this->parent_->start_advanced_sniffing(); }
149
150 protected:
152};
153
154template<typename... Ts> class RFBridgeStopAdvancedSniffingAction : public Action<Ts...> {
155 public:
157
158 void play(const Ts &...x) { this->parent_->stop_advanced_sniffing(); }
159
160 protected:
162};
163
164template<typename... Ts> class RFBridgeStartBucketSniffingAction : public Action<Ts...> {
165 public:
167
168 void play(const Ts &...x) { this->parent_->start_bucket_sniffing(); }
169
170 protected:
172};
173
174template<typename... Ts> class RFBridgeSendRawAction : public Action<Ts...> {
175 public:
177 TEMPLATABLE_VALUE(std::string, raw)
178
179 void play(const Ts &...x) { this->parent_->send_raw(this->raw_.value(x...)); }
180
181 protected:
183};
184
185template<typename... Ts> class RFBridgeBeepAction : public Action<Ts...> {
186 public:
189
190 void play(const Ts &...x) { this->parent_->beep(this->duration_.value(x...)); }
191
192 protected:
194};
195
196} // namespace rf_bridge
197} // namespace esphome
uint8_t raw[35]
Definition bl0939.h:0
virtual void play(const Ts &...x)=0
void trigger(const Ts &...x)
Definition automation.h:325
RFBridgeBeepAction(RFBridgeComponent *parent)
Definition rf_bridge.h:187
TEMPLATABLE_VALUE(uint16_t, duration) void play(const Ts &...x)
Definition rf_bridge.h:188
void send_raw(const std::string &code)
CallbackManager< void(RFBridgeAdvancedData)> advanced_data_callback_
Definition rf_bridge.h:77
void send_advanced_code(const RFBridgeAdvancedData &data)
CallbackManager< void(RFBridgeData)> data_callback_
Definition rf_bridge.h:76
void write_byte_str_(const std::string &codes)
void add_on_advanced_code_received_callback(std::function< void(RFBridgeAdvancedData)> callback)
Definition rf_bridge.h:55
void add_on_code_received_callback(std::function< void(RFBridgeData)> callback)
Definition rf_bridge.h:52
void send_code(RFBridgeData data)
std::vector< uint8_t > rx_buffer_
Definition rf_bridge.h:73
RFBridgeLearnAction(RFBridgeComponent *parent)
Definition rf_bridge.h:136
RFBridgeReceivedAdvancedCodeTrigger(RFBridgeComponent *parent)
Definition rf_bridge.h:89
RFBridgeReceivedCodeTrigger(RFBridgeComponent *parent)
Definition rf_bridge.h:82
RFBridgeSendAdvancedCodeAction(RFBridgeComponent *parent)
Definition rf_bridge.h:117
TEMPLATABLE_VALUE(uint8_t, length) TEMPLATABLE_VALUE(uint8_t
low code void play(const Ts &...x)
Definition rf_bridge.h:102
TEMPLATABLE_VALUE(uint16_t, sync) TEMPLATABLE_VALUE(uint16_t
RFBridgeSendCodeAction(RFBridgeComponent *parent)
Definition rf_bridge.h:96
TEMPLATABLE_VALUE(std::string, raw) void play(const Ts &...x)
Definition rf_bridge.h:177
RFBridgeSendRawAction(RFBridgeComponent *parent)
Definition rf_bridge.h:176
RFBridgeStartAdvancedSniffingAction(RFBridgeComponent *parent)
Definition rf_bridge.h:146
RFBridgeStartBucketSniffingAction(RFBridgeComponent *parent)
Definition rf_bridge.h:166
RFBridgeStopAdvancedSniffingAction(RFBridgeComponent *parent)
Definition rf_bridge.h:156
uint8_t duration
Definition msa3xx.h:0
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
static void uint32_t
uint16_t sync
Definition sun_gtil2.cpp:0
uint16_t length
Definition tt21100.cpp:0
uint16_t x
Definition tt21100.cpp:5